C语言汉诺塔程序

C语言汉诺塔程序,第1张

将以下内容全部复制到新建的源文件中:(本人自己写的,因为你那课本上的代码,没解释,书写不规范,枯配搏很难理解清楚,所以我直接新写了一个完整的代码,附带详细说明)

#include <stdio.h>

//汉诺塔x层塔从A塔整体搬到C塔,中间临时B塔。

//x层塔是从大到小往上叠放。每次移动只能移动一层塔。并且在移动过程中必须保证小层在上边

//借助B塔可以将x层塔全部从A搬到C上,并且符合要求(在移动过程中大的那块在下边,小的那块在上边卖迟)

int main()

{

void tower(int x,char a,char b,char c) //声明函数

int x=5,a='A',b='B',c='C' //x表示有5层塔,具体要多少层自己修改这个值。abc分别表示ABC塔。

tower(x,a,b,c) //x层塔从a移动到c的全过程,主程序只有这条有效语句

return 0

}

//以下是tower函数的定义

//参数解析:x层塔放在a上,b是中间塔,c是目标塔。即x层塔要从a搬到c上。

//此函数实现x层塔从a整体转移到c上。以及这个过程是怎么搬的全部过程。

void tower(int x,char a,char b,char c)

{

if(x==1)printf("将%d从%c放到%c\n",x,a,c) //只有1层塔时,直接从a搬到c上。

else //不止1层塔,则先将x-1层塔从a按照规律搬到b上,再将最后一块从a搬到c上,最后再将b上的x-1层塔按没祥照规律搬到c上。

{

tower(x-1,a,c,b) //先将x-1层塔从a按照规律搬到b上,注意参数b放在最后,因为放在最后的参数是准备搬过去的目标塔。

printf("将%d从%c放到%c\n",x,a,c) //将最后一块从a搬到c上

tower(x-1,b,a,c) //最后再将b上的x-1层塔按照规律搬到c上,注意参数b放在开头,因为x-1层是要从b上搬过去的。

}

}

汉诺塔算法介绍:

把三根柱子按顺序排成“品”字型,把所晌搭有圆盘按从大到小的顺序放于柱子A上,根宴含拿据圆盘数量来确定柱子排放的顺序:n若为偶数的话,顺时针方向依次摆放为:ABC;而n若为奇数的话,就按顺时针方向依次摆放为:ACB。

这样经过反复多次的测试,最后就可以按照规定完成汉诺塔的移动。因此很简单的,结老穗果就是按照移动规则向一个方向移动金片:如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C。

n个盘子,A、B、C三根柱子,A上有n个盘子,要求从A全部移到C。

基本思路:

(1)借助C,将上层的n-1个盘子从A临时搬到B;

(2)将最大的n号盘子从A移到C;

(3)借助A,将B上全顷伍念部的n-1个盘子移到C。

using System

public class Program2

{

public static void Main()

{

int n

Console.Write("雀困请输入数字n以解决n阶汉诺塔问题:\n")

n = int.Parse(Console.ReadLine())

Hanoi(n, 'A', 'B', 'C')

}

//借助柱子B,将n个盘子从柱子从A移到C

public static void Hanoi(int n, char A, char B, char C)

{

if (n == 1)

{

Console.WriteLine("Move disk {0} from {1} to {2}", n, A, C)

}

else

{

Hanoi(n - 1, A, C, B) //借助柱子C,将n-1个盘子从柱子从A移到B

Console.WriteLine("Move disk {0} from {1} to {2}", n, A, C)

Hanoi(n - 1, B, A, C)//借助柱子A,橘梁将n-1个盘子从柱子从B移到C

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12331449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存