汉诺塔问题Plus——人工智能

实验五 汉诺塔问题

一、实验目的

本实验课程是计算机、智能、物联网等专业学生的一门专业课程,通过实验,帮助学生更好地掌握人工智能相关概念、技术、原理、应用等;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对智能程序、智能算法等有比较深入的认识。

二、基本要求

1.实验前,复习《人工智能》课程中的有关内容。
2.准备好实验数据。

三、实验软件

推荐使用C或C++(Visual studio等平台)(不限制语言使用,如Java,matlab,Python等都可以)。

四、实验内容:

(3)汉诺塔问题
汉诺塔问题来自一个古老的传说:在世界刚被创建的时候有一座钻石宝塔(塔A),其上有64个金碟。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔(塔B和塔C)。从世界创始之日起,婆罗门的牧师们就一直在试图把塔A上的碟子移动到塔C上去,其间借助于塔B的帮助。每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面。当牧师们完成任务时,世界末日也就到了。
采用问题归约法把汉诺塔问题分成以下三个步骤实现:
将塔A上的n-1个碟子借助塔C先移到塔B上
把塔A上剩下的一个碟子移到塔C上
把n-1个碟子从塔B借助于塔A移到塔C上
实验要求:
1.让盘子数从2 开始到7进行实验,记录程序运行时间和递归调用次数。
2.画出盘子数n和运行时间t 、递归调用次数m的关系图,并进行分析

五、实验程序组成:

(1)使用的函数及作用:
Move(int n, char A, char B);
//移动两个盘子
Hanoi(int n,char A, char B, char C);
//分析当前状态并决定下步操作
(2)实验代码:

#include<iostream>
using namespace std;

void Move(int n, char A, char B);
void Hanoi(int n, char A, char B, char C)
{
	if (n == 1)
		Move(1, A, C);
	else
	{
		Hanoi(n - 1, A, C, B);
		Move(n, A, C);
		Hanoi(n - 1, B, A, C);
	}
}

void Move(int n, char A, char B)
{
	cout << " number " << n << ":" << A << " ---> " << B << endl;
}

int main()
{
	char	X = 'A';
	char	Y = 'B';
	char	Z = 'C';
	int		n;
	cout << "Please input the nunber: " << endl;
	cin >> n;
	Hanoi(n, X, Y, Z);
	return 0;
}

六、实验结果分析:

当n=2时,
在这里插入图片描述

当n=3时,
在这里插入图片描述

当n=5时,
在这里插入图片描述
在这里插入图片描述

分析:
让盘子数从2到7进行实现,对盘子数n和运行时间t 、递归调用次数m之间的关系进行分析。
※其中 左竖坐标是时间,右竖坐标是次数,横坐标是盘子数
在这里插入图片描述

总结:
1、递归调用过程中,在程序执行之前无法知道控制这种调用栈的规模,因为这一规模取决于递归调用的次序。在这种情况下,程序的地址空间可能动态变化;2、递归应用于程序设计时,结构清晰、程序易读,编制和调试程序很方便,不需要用户自行管理递归工作栈。但递归应用于计算机时需要占用大量系统资源(包括堆栈、软中断和存贮空间等),并消耗大量处理时间。因此,可以考虑采用并行计算进行处理,但3、递归是串行的,其第n步运算依赖于第n-1步运算,所以在计算机软件理论上不存在递归问题并行计算的可能性。实际上是否存在并行递归计算有待进一步探讨。最后,通过对汉诺塔算法的分析让我更清楚的认识到了不同的算法对
程序性能的影响,也让我明白掌握了算法将会有助于提高软件的开发。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值