#include <stdio.h>
char hanoi_buf[3][100];
int each_num[3];
int steps = 0;
int numbers;
void init_hanoi_buf(int n)
{
int i = 0;
numbers = n;
for(i =0;i < n; i++)
{
hanoi_buf[0][i] = n - i;
}
each_num[0] = n;
}
void print_hanoi_buf(void)
{
int i = 0;
int j = 0;
printf("__________________step:%d___________________\n", steps);
for (i = numbers - 1; i >= 0; i--)
{
for(j = 0; j < 3; j++)
{
if(/*each_num[j] >= i &&*/ hanoi_buf[j][i] !=0 )
printf("%d ", hanoi_buf[j][i]);
else
printf(" ");
}
printf("\n");
}
printf("A B C\n");
printf("_____________________________________\n");
}
#define IDX(x) (x-'A')
/*
a is org
c is target
b is temp.
*/
void hanoi(int n, char a, char b, char c)
{
if(n == 1)
{
printf("%s [%d]%d %c -->%c\n", __FUNCTION__, __LINE__, n , a, c);
steps++;
hanoi_buf[IDX(c)][each_num[IDX(c)]] = hanoi_buf[IDX(a)][each_num[IDX(a)]-1];
hanoi_buf[IDX(a)][each_num[IDX(a)]-1] = 0;
each_num[IDX(c)]++;
each_num[IDX(a)]--;
print_hanoi_buf();
}
else
{
hanoi(n - 1, a, c, b);
printf("%s [%d]%d %c -->%c\n", __FUNCTION__, __LINE__, n , a, c);
steps++;
hanoi_buf[IDX(c)][each_num[IDX(c)]] = hanoi_buf[IDX(a)][each_num[IDX(a)]-1];
hanoi_buf[IDX(a)][each_num[IDX(a)]-1] = 0;
each_num[IDX(c)]++;
each_num[IDX(a)]--;
print_hanoi_buf();
hanoi(n - 1, b, a, c);
}
}
int main()
{
int n = 3;
printf("_____________________________________\n");
init_hanoi_buf(n);
print_hanoi_buf();
hanoi(n, 'A', 'B', 'C');
return 0;
}
汉诺塔hanoi C语言
原创
©著作权归作者所有:来自51CTO博客作者wangxinyu2011的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:六 运行级别调整增加启动项
下一篇:二 DeepinV20版本安装
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
函数递归经典题目——汉诺塔,青蛙跳台阶
递归常见例题——斐波那契、汉诺塔、青蛙跳台阶
递归 n的阶乘 i++ -
汉诺塔问题(Hanoi)(2.0)
只能分享代码了,自己功夫还不太行,暂时无法详细分析
字符常量 汉诺塔2.0 -
汉诺塔(hanoi tower)游戏
递归实现汉诺塔
汉诺塔 递归 C语言 递归实现 #include -
C# 汉诺塔(Hanoi)的递归解法
C# 汉诺塔(Hanoi)的递归解法解法思路分三个部分:挪走最下面的那个盘子之上的所有盘子挪走最下面的那
算法 c# 递归法 Parse 递归 -
汉诺塔问题(Hanoi)(1.0版)
这是汉诺塔的第一版,先简单分析
递归函数 汉诺塔