-
问题描述
-
假设有三个柱子A.B.C,N个盘子
-
每次只允许移动一个盘子
-
必须保证小盘子在大盘子之上
-
如何把所有盘子从A移到C?
-
-
理解过程(转化为递归问题)
-
用C柱做过渡,将A柱上的n-1的盘子移到B上
-
从A柱上最下面的盘子直接移到C柱上
-
用A柱做过渡,将B柱上的n-1个盘子移到C上
-
-
算法实现
#include "iostream" using namespace std; void move(int x,char a,char b) { cout<<x<<"从"<<a<<"移到"<<b<<"\n"; } void hanoi(int n,char x,char y,char z) { if(n==1) move(n,x,z); else { hanoi(n-1,x,z,y); move(n,x,z); hanoi(n-1,y,x,z); } } int main(void) { int n; cin>>n; hanoi(n,'A','B','C'); return 0; }
-
来源:https://www.cnblogs.com/Mr-Peng/p/12155329.html