C++/python解决汉诺塔问题
2017-11-29 17:20
253 查看
今天学习python的时候,恰好慕课上的老师给出的例子是汉诺塔问题。之前也看过汉诺塔的代码,给我的感觉就是...移来移去好乱啊
恰好一天没课,打算把这个问题搞清楚,先用C++去实现吧,给出代码
#include<iostream>
using namespace std;
void Move(char a, char b, char c, int n){
if(n==1){
cout << "从" << a << "移动至" << c <<endl;
return;
}
else
Move(a, c, b, n-1);
Move(a, b, c, 1);
Move(b, a, c, n-1);
}
int main(){
int n;
cout << "请输入汉诺塔盘数!" <<endl;
cin >> n;
Move('a', 'b', 'c', n);
return 0;
}
我详细的解释一下每句代码的作用
首先,汉诺塔问题有三支杆和若干盘子,我们从左到右取名a,b,c杆
除了主函数,我还定义了Move函数,4个参数的意义分别是:出发杆,中途‘休息’杆,目的杆,出发杆上的盘数
首先,从主函数开始看,在获取盘子数后,我们的目的便是将这n个盘子从a(汉诺塔问题默认的出发杆)运到c(目的杆),从总体来看,b杆为中途‘休息’杆
所有递归函数都要有终止条件,当出发杆上只有一个盘的时候,这个问题便不能往下分解了(这个盘肯定只能从出发杆移到目的杆)。
那当出发杆上不止一个盘的时候,比如说,四阶汉诺塔,这时候就需要【1】先将上面三个小盘移到中途休息杆(这里是b)【2】将最大的盘从出发杆(这里是a)移到目的杆(这里是c)【3】将上面三个小盘从中途休息杆(这里是b)移到目的杆(这里是c)
而上面第(1)步的实现,其实就是个三阶汉诺塔,只不过出发杆变成了b,中途休息杆变成了a,目的杆变成了c
当然,在没有分解成一阶汉诺塔之前,会继续分解成低阶汉诺塔的
然后又用python写了一遍
def Move(a, b, c, n):
if n==1:
print 'move %c to %c' %(a, c)
return
else:
Move(a, c, b, n-1);
Move(a, b, c, 1);
Move(b, a, c, n-1);
n=input('please input n:');
Move('a', 'b', 'c', n);
感觉用python写有一种暗爽,或许是不用声明变量类型
?
恰好一天没课,打算把这个问题搞清楚,先用C++去实现吧,给出代码
#include<iostream>
using namespace std;
void Move(char a, char b, char c, int n){
if(n==1){
cout << "从" << a << "移动至" << c <<endl;
return;
}
else
Move(a, c, b, n-1);
Move(a, b, c, 1);
Move(b, a, c, n-1);
}
int main(){
int n;
cout << "请输入汉诺塔盘数!" <<endl;
cin >> n;
Move('a', 'b', 'c', n);
return 0;
}
我详细的解释一下每句代码的作用
首先,汉诺塔问题有三支杆和若干盘子,我们从左到右取名a,b,c杆
除了主函数,我还定义了Move函数,4个参数的意义分别是:出发杆,中途‘休息’杆,目的杆,出发杆上的盘数
首先,从主函数开始看,在获取盘子数后,我们的目的便是将这n个盘子从a(汉诺塔问题默认的出发杆)运到c(目的杆),从总体来看,b杆为中途‘休息’杆
所有递归函数都要有终止条件,当出发杆上只有一个盘的时候,这个问题便不能往下分解了(这个盘肯定只能从出发杆移到目的杆)。
那当出发杆上不止一个盘的时候,比如说,四阶汉诺塔,这时候就需要【1】先将上面三个小盘移到中途休息杆(这里是b)【2】将最大的盘从出发杆(这里是a)移到目的杆(这里是c)【3】将上面三个小盘从中途休息杆(这里是b)移到目的杆(这里是c)
而上面第(1)步的实现,其实就是个三阶汉诺塔,只不过出发杆变成了b,中途休息杆变成了a,目的杆变成了c
当然,在没有分解成一阶汉诺塔之前,会继续分解成低阶汉诺塔的
然后又用python写了一遍
def Move(a, b, c, n):
if n==1:
print 'move %c to %c' %(a, c)
return
else:
Move(a, c, b, n-1);
Move(a, b, c, 1);
Move(b, a, c, n-1);
n=input('please input n:');
Move('a', 'b', 'c', n);
感觉用python写有一种暗爽,或许是不用声明变量类型
?
相关文章推荐
- C++调用Python脚本碰到的问题及解决方法【更新中】
- c++调用python链接问题及解决
- 【Python学习】Python解决汉诺塔问题
- linux Eclipse上c++调用使用了tensorflow库的python程序遇到的问题及解决方法
- 3行核心代码解决汉诺塔问题(C++递归实现)
- Python递归解决汉诺塔问题
- 使用C++调用Python脚本的步骤和问题解决办法
- c++调用python链接的问题及解决方法
- 用C++解决汉诺塔问题
- Python 包安装error: Microsoft Visual C++ 14.0 is required...问题解决方案,
- 递归解决汉诺塔问题C++
- Python 3.6 模块安装“error: Microsoft Visual C++ 14.0 is required...”问题解决
- C++/python解决无穷皇后问题
- Python练习(2):递归解决汉诺塔问题
- python解决汉诺塔问题极其简单
- 经典递归解决汉诺塔问题 python实现
- 关于A+B+C问题4种语言的解决办法,Java、C语言、C++、Python
- Windows C++程序调用包含TensorFlow代码的Python脚本出错问题的解决办法
- 用python解决汉诺塔问题
- 【Python学习】Python解决汉诺塔问题