汉诺塔问题
这个经典问题现在拿来写,发现竟然还是不太明白;现在总结一下这个题的一些算法;
解法一:
通过一定的递推,我们会发现当
n=1时,s=1;
n=2时,s=3;
n=3时,s=7;
所以可以得出公式s=2^n - 1;
解法二:
递归求解;
这也是这道题的精髓所在;
递归的思想就是由小到大;所以我们可以先分析当n=2时,怎么转换圆盘;然后就可以推出任意n都是由n=2,转化而来;
代码:
#include<bits/stdc++.h>
using namespace std;
int sum;
void han(int p,char a,char b,char c){
if(p==0) return;
han(p-1,a,c,b);
sum++;
cout<<a<<"----"<<c<<endl;
han(p-1,b,a,c);
}
int main(){
int n;
scanf("%d",&n);
han(n,'A','B','C');
cout<<sum<<endl;
return 0;
}