汉诺塔问题思路:
如果n为1直接把汉诺塔从A移动到C
如果n为多个的话,先把n个汉诺塔分为1到n-1和n俩部分,分三步走(1)把1到n-1号汉诺塔从A移动到B
(2)把n号汉诺塔从A移动到C
(3)把1到n-1号汉诺塔再从B移动到C
源码:
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int count=1;
void moveTower(int n,char *from,char *depend, char *too){ //把高度为n的汉诺塔从from移动到to,借助于depend
//如果只有一个高度为1的汉诺塔,要从from移动到to,直接移动到to
if(n==1){
cout<<"第"<<count<<"步:1"<<"从"<<from<<"移动到"<<too<<endl;
count++;
}
else{
//如果是多个汉诺塔要从from移动到to,先把上面n-1的汉诺塔从from移动到depend
moveTower(n-1,from,too,depend);
//再把最底层的汉诺塔从from移动到to
cout<<"第"<<count<<"步:"<<n<<"从"<<from<<"移动到"<<too<<endl;
count++;
//最后把刚刚移动到depend上面的汉诺塔全部移动到to上面
moveTower(n-1,depend,from,too);
}
}
int main(int argc, char *argv[]) {
int n; //汉诺塔高度
cin>>n;
moveTower(n,"A","B","C");
return 0;
}