标签:
/* *(1)用4柱汉诺塔算法把A柱上部分的n- r个碟子通过C柱和D柱移到B柱上【F( n- r )步】。 *(2)用3柱汉诺塔经典算法把A柱上剩余的r个碟子通过C柱移到D柱上【2^r-1步】。 *(3)用4柱汉诺塔算法把B柱上的n-r个碟子通过A柱和C柱移到D柱上【F(n-r)步】。 *(4)依据上边规则求出所有r(1≤r≤n)情况下步数f(n),取最小值得最终解。 *因此Frame算法的递归方程如下:F(n)=min(2*F(n-r)+2^r-1),(1≤r≤n)。 *通过这个方程我们能得到所有4柱汉诺塔的步骤个数,同时也有人证明了,对于四柱汉诺塔, *当r=(sqrt(8*n+1)-1)/2时,能保证f(n)取得最小值F(n)=(n-(r^2-r+2)/2)*2^r+1。 *所以算法的复杂度是F(n)=O(sqrt(2*n)*2^ sqrt(2*n))。 */ #include<stdio.h> #include<math.h> int hanoi_4(int n) { int r = (sqrt(8*n+1)-1)/2; return (n-(r*r-r+2)/2)*pow(2,r)+1; } int main() { int t, n, result; scanf("%d",&t); while(t--) { scanf("%d",&n); result = hanoi_4(n); printf("%d\n",result); } }
标签:
原文地址:http://www.cnblogs.com/jiasheng/p/5426613.html