2-1 Hanoi塔递归算法
题目描述
题目描述:递归方法进行Hanoi塔问题求解,
这里要求输入Hanoi塔层数n,输出盘子移动步骤。
汉诺塔问题:有三根杆子X,Y,Z。X杆上有n个(1<=n<=10)穿孔圆盘,
盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至Z杆:
每次只能移动一个圆盘,大盘不能叠在小盘上面。
功能需求
输入格式:
输入为一个正整数n为盘子数目,且1<=n<=10。
输出格式:
输出每一步移动盘子的记录。一次移动一行。
每次移动的记录为例如3:X->Y 的形式,即把编号为3的盘子从X杆移至Y杆。
我们约定圆盘从小到大编号为1, 2, …n。
即最上面那个最小的圆盘编号为1,最下面最大的圆盘编号为n。
输入样例1:
在这里给出一组输入。例如:
3
输出样例1:
在这里给出相应的输出。例如:
1:X->Z
2:X->Y
1:Z->Y
3:X->Z
1:Y->X
2:Y->Z
1:X->Z
输入样例2:
在这里给出一组输入。例如:
0
输出样例2:
在这里给出相应的输出。例如:
Wrong Input.
功能模块
根据各模块的功能,确定各模块及接口设计如下:
Column 1 | Column 2 |
---|---|
void start1(); //初始界面1,开始输入 | void Move(); //输出圆盘的转移情况 |
void start2(); //初始界面2,继续输入 | int Hanoi(); //Hanoi塔的处理情况 |
测试情况
系统主要功能模块的运行结果如图2.1.1~2.1.8所示:
图2.1.1 系统菜单1(开始输入)
图2.1.2 系统菜单2(继续输入)
图2.1.3 输入合法选择项的运行结果(开始输入)
图2.1.4 输入合法选择项的运行结果(继续输入)
图2.1.5 输入不合法选择项的运行结果(开始输入)
图2.1.6 输入不合法选择项的运行结果(继续输入)
图2.1.7 退出系统(开始界面)
图2.1.8 退出系统(继续界面)
代码内容
/************************************
program:(C)2.1: Hanoi塔递归算法
wrintten by Duan Linchuan.
01/02/2024.Copyright 2024
************************************/
//copyeight 中文翻译:版权
#include<stdio.h>
#include <windows.h>
//声明函数
int main(); //主函数
void start1(); //初始界面1,开始
void start2(); //初始界面2,继续
void Move(int n,char x,char y); //输出圆盘的转移情况
int Hanoi(int n, char one, char<