1. 三柱汉诺塔
T(n)=2*T(n-1)+1,
步数是T(n)=2^n-1。
2. 四柱汉诺塔
F(n)=2*F(n-2)+3
移动步数为:F(n)=4*2^(n/2)-3:n为奇数;
F(n)=6*2^(n/2-1)-3:n为偶数
计算四柱汉诺塔最少步数的代码为
int n;
a[1]=1;a[2]=3;a[3]=5;
for(i=4;i<=n;i++)
{
min=99999999;
for(j=1;j<i;j++)
if(2*a[j]+pow(2.0,i-j)-1<main)
min=2*a[j]+(int)pow(2.0,i-j)-1
a[i]=min;
}
printf("%d",a[n]);
一定注意公式为if(2*a[j]+pow(2.0,i-j)-1<min)
min=2*a[j]+(int)pow(2.0,i-j)-1;
a[i]=min;
记住后面是有个减1的,