码迷,mamicode.com
首页 > 其他好文 > 详细

4-hanoi

时间:2016-04-24 12:35:17      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

/*
*(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);
    }
    
}

 

4-hanoi

标签:

原文地址:http://www.cnblogs.com/jiasheng/p/5426613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!