汉诺塔

来源:互联网 发布:谢晋影视艺术学院 知乎 编辑:程序博客网 时间:2024/05/17 23:07

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的,

0 0
原创粉丝点击