0
点赞
收藏
分享

微信扫一扫

【C语言】汉诺塔问题

追风骚年 2022-03-30 阅读 157

输入格式:

正整数n。

输出格式:

搬盘子过程,每行一次搬动。

输入样例:

3

输出样例:

A->C
A->B
C->B
A->C
B->A
B->C
A->C

代码如下:

#include <stdio.h>
#include <stdlib.h>
//Hanoi
void Hanoi(int n, char A, char B, char C);

int main()
{
    //设立盘子个数
    int n = 0;

    //输入盘子个数
    scanf("%d",&n);

    //递归函数
    Hanoi(n,'A','B','C');//传入ABC三个柱子 A:起始位置 B:经过位置 C:最终位置
    return 0;
}

//move
void move(char x, char y) {//x:起始位置 y:终止位置
        printf("%c->%c\n",x, y);
}

//Hanoi
void Hanoi(int n, char A, char B, char C) {
    //处理一个盘子
    if(n == 1) {
        move(A, C);
    }

    //处理n-1个盘子
    else {
        Hanoi(n - 1, A, C, B);//第一步将n-1个盘子从A经过C移到B
        move(A, C);//第二步将剩余盘子从A移到C
        Hanoi(n - 1, B, A, C);//第三步将n-1个盘子从B经过A移到C
    }

}

核心关键

举报

相关推荐

0 条评论