汉诺塔

1.求n个圆盘的汉诺塔的步骤
void Hanoi(int n,char a,char b,char c){
if(n==1)printf("Step %d Plate %d: %c-->%c\n",++step,n,a,c);
else{
Hanoi(n-1,a,c,b);
printf("Step %d Plate %d: %c-->%c\n",++step,n,a,c);
Hanoi(n-1,b,a,c);
}
}
2.求n个圆盘的三柱汉诺塔的最小步骤数
cin>>n; cout<<(long long)pow(2,n)-1;
3.格雷码与汉诺塔之间的关系
while(x>=1){
if(Gray[x]!=Gray1[x]){
cout<<x;
break;
}
x--;
}
4.Hanoi双塔问题最小步骤数(高精度)
for(int i=1;i<=n;i++){
for(int j=0;j<l;j++){
a[j]*=2;
}
k=0;
l++;
while(k<l){
a[k]+=a[k-1]/10;
a[k-1]%=10;
k++;
}
}
5.Hanoi四柱问题最小步骤数
for(int i=4;i<=12;i++){
for(int j=1;j<i;j++){
f[i]=min(f[i],f[j]*2+d[i-j]);
}
}
6.求n个圆盘的三柱汉诺塔的最小步骤数(只能移动到相邻的柱子上)
for(int i=1;i<=n;i++){
for(int j=0;j<l;j++){
a[j]*=3;
}
k=0;
l++;
while(k<l){
a[k]+=a[k-1]/10;
a[k-1]%=10;
k++;
}
}
a[0]-=1;

浙公网安备 33010602011771号