C语言实现汉诺塔(c语言解决汉诺塔)

C语言实现汉诺塔求解

C语言实现汉诺塔(c语言解决汉诺塔)

(配图来源网络)

今天实现一个递归的经典题目:汉诺塔求解。

有三根柱子,在a柱子上按照大小顺序一次摆放着n个圆盘,我们希望把这n个圆盘从a柱子借助b柱子移动到c柱子上,要求:一、每次只能移动一个圆盘。二、大的圆盘永远不能压在小的圆盘上。

我们如果不知道其中的技巧是很难完成求解的,但是我们可以用递归求解,我们要把a上的圆盘全部移动到c上,那么我们首先要把前n-1个圆盘移动到b上,此时a上还有一个最底层的圆盘,而c上没有圆盘(对应配图状态3),我们才可以把这个最底层的圆盘移动到c上,移动之后(对应配图状态4),问题变成了把b上n-1个圆盘借助a移动到c,如此形成了递归,一直到a上只剩一个最小的圆盘,b上没有圆盘,c上有后n-1个圆盘,也就是临界条件。

输入:整数n,代表n圆盘

输出:每次移动的情况,x->x

示例:3

a->c

a->b

c->b

a->c

b->a

b->c

a->c

代码:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

void move (int n, char a, char b, char c);

int main ()

{

int n;

scanf ("%d", &n);

move (n, 'a', 'b', 'c');

system ("pause");

return 0;

}

void move (int n, char a, char b, char c)

{

if (n == 1)

printf ("%c->%cn", a, c); //临界条件,当n为1时,直接从a移动到c

else

{ //n不为1

move (n - 1, a, c, b);

printf ("%c->%cn", a, c);

move (n - 1, b, a, c);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论