汉诺塔问题

将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
",
            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: 
");
    moveDisks(n, 'A', 'B', 'C');
    return 0;    
}
原文地址:https://www.cnblogs.com/utank/p/3603128.html