uTank-木头
每一个你不满意的现在,都有一个你没有努力的曾经。

 

将n个圆盘从x柱,经由z柱中转,移到y柱(解出n层汉诺塔)时:

当n=0时,

  不用做任何动作。

当n>0时,

  首先,将n-1个圆盘从x柱,经由y柱中转,移到z柱(解出n-1层汉诺塔)。

  然后,将1个圆盘从x柱移到y柱。

  最后,将n-1个圆盘从z柱,经过x柱中转,移到y柱(解出n-1层汉诺塔)。

从以上步骤可知,为了解出n层汉诺塔,要使用“n-1层汉诺塔”的解法。

#include <stdio.h>
#include <stdlib.h>

// x:起点柱,y:目标柱,z:中转柱
void moveDisks(int n, char x, char y, char z)
{
    if(n == 0)
    {
        // 什么也不做
    }
    else
    {
        // 将n-1个圆盘,从x柱,经由y柱中转,移到z柱
        moveDisks(n-1, x, z, y);
        printf("Move disk %d : from %c to %c\r\n",
            n, x, y); // 从x柱移到y柱
        // 将n-1个圆盘,从z柱,经由x柱中转,移到y柱
        moveDisks(n-1, z, y, x);    
    }
}

int main(void)
{
    int n;
    printf("Enter number of disks: ");
    scanf("%d", &n);
    printf("The moves are: \r\n");
    moveDisks(n, 'A', 'B', 'C');
    return 0;    
}

 

posted on 2014-03-16 11:09  uTank  阅读(187)  评论(0编辑  收藏  举报