汉诺塔问题

#define _CRT_SECURE_NO_WARNINGS
#include
void Move(int n,char x, char y)
{
    printf("E\n");
    printf("第%d个盘子% c--> % c\n",n,x,y);
}
void Hanoi(int n,char one,char two,char three)
{
    if (n==1)
    {
        Move(n,one, three);
    }
    else
    {
        //将第n-1个盘子借助三从一挪到二
        Hanoi(n - 1, one, three, two);
        //再将最后一个盘子从一挪到三
        
        Move(n,one, three);
        //最后将n-1个盘子从二借助一挪到三
        
        Hanoi(n-1,two,one,three);
    }
}
int main()
{
    int n = 0;
    printf("请输入盘子的总数:");
    scanf("%d",&n);
    printf("对%d个盘子的移动过程如下:\n",n);
    Hanoi(n, 'a', 'b', 'c');//把n个盘子从A座挪到c座上,借助于c座
    return 0;
}

详解:

Hanoi(n, 'a', 'b', 'c');

n是要移动盘子的个数

a,b,c对应的三个位置分别是:起始位置,中转位置,目的位置

Hanoi(int n, 起始位置, 中转位置, 目的位置)

你可能感兴趣的:(c语言,算法)