一.问题描述
汉诺塔问题
二.设计思路
把N-1层的环子先通过C移到B,最后再把第N层的最大的环子移到C,这个时候就剩下一个N-1层的新“塔”,那么我们把他看成一个新的“塔”把B柱看成之前的A柱,通过C柱把(N-1)-1层移到A柱,再把第N-1层的最大(原本第二大)的环子放到C,如此循环最后N=1 就了解了。
三.流程图
四.伪代码
1
五.代码实现
#include<iostream>
using namespace std;
void hanoi(int n, char a, char b, char c)
{
if (n == 1)
cout << n << " " << a << " " << c << endl;
else
{
hanoi(n - 1, a, c, b);
cout << n << " " << a << " " << c << endl;
hanoi(n - 1, b, a, c);
}
}
int main()
{
int n;
cout << "输入正整数:" << endl;
cin >> n;
cout << "结果为" << endl;
hanoi(n, 'A', 'B', 'C');
/*
假设有4层,跟全排列差不多的想法,先把他看成3层,再看成2层,而且移动的方法是相同的。*/
return 0;
}
浙公网安备 33010602011771号