// 汉诺塔.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
//递归函数的调用,汉诺塔游戏,有3个位置abc,n个盘子(从上到下落着编号为1到n),
//现在要把n个盘子由a挪到c,
//只能先把n-1个盘子由a挪到b,把最后一个盘子由a挪到c,再把n-1个盘子由b挪到c。
void Hano(int n,/*盘子的数量*/
char a,/*盘子移出的柱子*/
char b,/*中转柱子*/
char c/*盘子到达的柱子*/)
{
if (n == 1)//递归基,即不能让递归一直递归下去,要停的.
{
cout <<"把第"<<n<< "个盘子,从" << a << "柱子移到" << c << "柱子。\n";
return;
}
Hano(n - 1, a, c, b);//第一步,先把n-1个盘子从a挪到b。
//以上这一步递归调用后b、c位置互换了,决定了第一次挪的盘子是去b还是c
cout << "第" << n << "个盘子,从" << a << "柱子移到" << c<< "柱子。\n"; //第二步,把第n个盘子从a挪到c
Hano(n - 1, b, a, c); //第三步,把n-1个盘子从b挪到c,完成了n个盘子从a到c的挪动
}
int main()
{
cout << "输入盘子数量\n";
int total;
cin >> total;
cout << "输入盘子移出的盘子\n";
char from;
cin >> from;
cout << "输入中转盘子\n";
char mid;
cin >> mid;
cout << "输入到达的盘子\n";
char to;
cin >> to;
cout << "盘子由上到下编号为1到"<<total<<endl<<endl;
while (0!=total)
{
Hano(total, from, mid, to);
cout << "再次输入盘子数量:\n";
cin >> total;
}
system("pause");
return 0;
}
《小程序》汉诺塔问题
最新推荐文章于 2020-11-11 15:06:15 发布