汉诺塔C语言程序
发布网友
发布时间:2022-04-22 05:54
我来回答
共3个回答
热心网友
时间:2023-10-01 21:44
hanoi(int n,char a,char b,char c)
//将n个盘子从a通过b移动到c
{
if(n==1)
move(a,1,c); //将编号为1的盘子从a移动到c
else
{
hanoi(n-1,a,c,b);
move(a,n,c);//将编号为n的盘子从a移动到c
hanoi(n-1,b,a,c);
}
}
热心网友
时间:2023-10-01 21:44
main()
{
int n;
void hanoi(int n,char a,char b,char c);
printf(";lease enter the number of disks to be moved:");
scanf("%d",&n);
hanoi(n,'a','b','c');
}
void hanoi(int n,char a,char b,char c)
{
if(n>0)
{hanoi(n-1,a,c,b);
printf("\n move disc %d from pile %c to %c",n,a,b);
hanoi(n-1,c,b,a)};
}
热心网友
时间:2023-10-01 21:45
C++:
#include <iostream>
#include <string>
using namespace std;
//移动函数;
void move(char start,char finish)
{
cout << start <<"------->" <<finish <<endl;
}
//把n个盘子从start柱子借助temp移动到finish柱子;
void hanoi(int n, char start, char temp,char finish)
{
if(n == 1)
{
move(start,finish);
}
else
{
//简化问题;只要把最上面的n-1个盘子借助finish 移动到temp;
hanoi(n-1,start,finish,temp);
//此时start柱子只剩下最大的一个盘子;temp上有n-1个,finish上为空;
//把start 上最大的移动到finish上。
move(start,finish);
//此时start上为空,temp上n-1个,finish上最大的一个。
//把temp上的n-1个借助start全部移动到finish;
hanoi(n-1,temp,start,finish);
}
}
int main()
{
int n;
cout << "请输入盘子的个数:";
cin >>n;
hanoi(n,'A','B','C');
return 0;
}