汉诺塔问题

当只有一个盘子时,将盘子直接从A移到C即可。
【汉诺塔问题】当有两个盘子时,先将A中上面的盘子移到B中,再将A中下面的盘子移到C中,再将B中的盘子移动到C中
当有三个盘子时,先将A上面的两个编号1到2的盘子借助C移到B中,然后将A中的3号盘子移到C中,再借助A将B中的两个盘子移到C
当A中有n个盘子时,先将A中1至n-1编号的盘子借助C移到B中,然后将A中的n号盘子移到C中,再借助A将B中的1至n-1编号的盘子移到C

#include using namespace::std; int i = 1; void move(int n, char from, char to)//将编号为n的盘子从from移到to { cout << '第' << i++ << '步' << '将' << n << '号盘子' << from << "---->" << to; } void hanoi(int n, char from, char depend, char to) { if (n == 1) { move(1, from, to); //只有一个的时候将初塔上的盘移到目的地 } else { hanoi(n - 1, from, to, depend); //将初塔中编号为1到n-1的盘子借助目的塔移到辅助塔 move(n, from, to); //将剩下的盘子从初塔移到目的塔 hanoi(n - 1, depend, from,to); //将辅助塔中编号为1到n-1的盘子借助初塔移到目的塔 } }int main() { int n; cin >> n; char from = 'A'; char to = 'C'; char depend= 'B'; hanoi(n,from,depend,to); return 0; }



    推荐阅读