Fork me on GitHub

汉诺塔非递归算法


实现源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

#include<stdio.h>
// 第一个塔为初始塔,中间塔为借用塔,最后一个塔为目标塔
int i = 1; // 记录步数
void move(int n,char from,char to)
{
printf("第%d步:将%d号盘子%c--->%c\n",i++,n,from,to);
}

void hanoi(int n,char from ,char depend_on,char to)
{
if(n == 1)
{
move(1,from,to); // 如果只有一个盘子,直接将这个盘子移到目标位置
}
else
{
hanoi(n-1,from,to,depend_on);
move(n,from,to);
hanoi(n-1,depend_on,from,to);
}
}

int main()
{
int n;
char x = 'A',y = 'B',z = 'C';
printf("请输入盘子的个数:\n");
scanf("%d",&n);
hanoi(n,x,y,z);

return 0;
}
坚持原创技术分享,您的支持将鼓励我继续创作
-------------本文结束感谢您的阅读-------------
0%