人工智能(梵塔问题)
- 格式:doc
- 大小:113.77 KB
- 文档页数:14
⼈⼯智能练习题答案1、什么是⼈⼯智能?⼈⼯智能有哪些研究领域?何时创建该学科,创始⼈是谁?(1)AI(Artificial Intelligence)是利⽤计算机技术、传感器技术、⾃动控制技术、仿⽣技术、电⼦技术以及其他技术仿制⼈类智能机制的学科(或技术),再具体地讲就是利⽤这些技术仿制出⼀些具有⼈类智慧(能)特点的机器或系统(2)⼈⼯智能的研究领域主要有专家系统、机器学习、模式识别、⾃然语⾔理解、⾃动定⼒证明、⾃动程序设计、机器⼈学、博弈、智能决策⽀持系统、⼈⼯神经⽹络等(3)⼈⼯智能于1956年夏季,由麦卡锡,明斯基、洛切斯特、⾹农等发起创建2、产⽣式系统的由哪三部分组成?各部分的功能是什么?课本29页(1)产⽣式系统由综合数据库、产⽣式规则和控制系统三部分组成(2)综合数据库⽤于存放当前信息,包括初始事实和中间结果;产⽣式规则⽤于存放相关知识;控制系统⽤于规则的解释或执⾏程序。
3、设有三枚硬币,其初始状态为(反,正,反),允许每次翻转⼀个硬币(只翻⼀个硬币,必须翻⼀个硬币)。
必须连翻三次。
⽤知识的状态空间表⽰法求出到达状态(反,反,反)的通路。
画出状态空间图。
课本51页问题求解过程如下:(1)构建状态⽤数组表⽰的话,显然每⼀硬币需占⼀维空间,则⽤三维数组状态变量表⽰这个知识:Q=(q1 , q2 , q3)取q=0 表⽰钱币的正⾯; q=1 表⽰钱币的反⾯构成的问题状态空间显然为:Q0=(0,0,0),Q1=(0,0,1),Q2=(0,1,0), Q3=(0,1,1),Q4=(1,0,0),Q5=(1,0,1),Q6=(1,1,0),Q7=(1,1,1)(2)引⼊操作f1:把q1翻⼀⾯。
f2:把q2翻⼀⾯。
f3:把q3翻⼀⾯。
显然:F={f1,f2,f3}⽬标状态:(找到的答案)Qg=(0,0,0)或(1,1,1)(3)画出状态图从状态图可知:从“反,正,反”(1,0,1)到“正,正,正”(0,0,0)没有解题路径;从“反,正,反”(1,0,1)到“反,反,反”(1,1,1)有⼏条解题路径f3 f2 f3,f1 f2 f1,…4、⼋数码问题:已知⼋数码的初始状态和⽬标状态如下:=>。
习题11.1什么是智能?什么是人工智能?解:略。
1.2什么是图灵测试?它有什么重要特征?解:略。
1.3一台机器要通过图灵测试,它必须具备哪些能力?解:自然语言处理: 实现用自然语言与计算机进行交流。
知识表示: 存储它知道的或听到的、看到的。
自动推理:能根据存储的信息回答问题,并提出新的结论。
机器学习:能适应新的环境,并能检测和推断新的模式。
计算机视觉:可以感知物体。
机器人技术:可以操纵和移动物体。
1.4人工智能的发展经历哪几个阶段?解:人工智能的产生和发展过程,可大致分为孕育期(20世纪50年代中期以前)、形成及第一个兴旺期(20世纪50年代中期-60年代中期)、萧条波折期(20世纪60年代中期-70年代中期)、第二个兴旺期(20世纪70年代中期-80年代中期)、稳步增长期(20世纪80年代中期-至今)。
1.5人工智能研究有哪几个主要学派?其特点是什么?解:略。
1.6人工智能的主要研究内容和应用领域是什么?解:略。
习题22.1什么是知识表示?知识表示有哪些要求?解:略。
2.2简述一阶谓词逻辑表示法表示知识的一般步骤。
解:略。
2.3简述一阶谓词逻辑表示法的优缺点。
解:略。
2.4 简述产生式系统的基本组成部分以及它们之间的关系。
解:略。
2.5什么是语义网络?它的基本语义关系哪些?解:略。
2.6 什么是框架?框架表示法的特点是什么?解:略。
2.7 什么是脚本?脚本一般由几部分构成?解:略。
2.8 面向对象表示法中封装和继承各有什么含义?解:略。
2.9 设有一些语句,请用相应的谓词公式分别把他们表示出来。
(1) 有的人喜欢梅花,有的人喜欢菊花,有的既喜欢梅花又喜欢菊花。
解:(∃x)(Human(x)∧Like(x, Club(x)))(∃x)(Human(x)∧Like(x, Mum(x)))(∃x)(Human(x)∧Like(x, club(x))∧Like(x, Mum(x)))(2) 他每天下午都去玩足球;解:(∀x) (Day(x)→PlayFootball(Ta))(3) 兰州市的夏天既干燥又炎热;解:Dry(Summer(Lanzhou))∧Hot(Summer(Lanzhou))(4) 所有人都有饭吃;解:(∀x) (Human(x)→Eat(x))(5) 喜欢玩篮球的人必喜欢玩排球;解:(∀x) (Human(x)∧Like(x, basketball))→Like(x, volleyball))(6) 要想出国留学,必须通过外语考试;解:Abroad(x)→Pass(x)(7) 每个学生都要参加考试解:(∀x) (Student(x)→Test(x))(8) 任何整数或是正的或是负的解:(∀x) (Integer(x)→PositiveNum (x)∨NegativeNum (x))2.10 房内有一只猴子、一个箱子,天花板上挂了一串香蕉,其位置关系如图2.20所示,猴子为了拿到香蕉,它必须把箱子推到香蕉下面,然后再爬到箱子上。
第二章知识表示方法2-2 设有3个传教士和3个野人来到河边,打算乘一只船从右岸渡到左岸去。
该船的负载能力为两人。
在任何时候,如果野人人数超过传教士人数,那么野人就会把传教士吃掉。
他们怎样才能用这条船安全地把所有人都渡过河去(答案并不唯一,意思正确即可)用S i(nC, nY) 表示第i次渡河后,河对岸的状态,nC表示传教士的数目,nY表示野人的数目,由于总人数的确定的,河对岸的状态确定了,河这边的状态也即确定了。
考虑到题目的限制条件,要同时保证,河两岸的传教士数目不少于野人数目,故在整个渡河的过程中,允许出现的状态为以下3种情况:1. nC=02. nC=33. nC=nY>=0 (当nC不等于0或3)用d i(dC, dY)表示渡河过程中,对岸状态的变化,dC表示,第i次渡河后,对岸传教士数目的变化,dY表示,第i次渡河后,对岸野人数目的变化。
当i为偶数时,dC,dY同时为非负数,表示船驶向对岸,i为奇数时,dC, dY同时为非正数,表示船驶回岸边。
初始状态为S0(0, 0),目标状态为S0(3, 3),用深度优先搜索的方法可寻找渡河方案。
在此,用图求法该问题,令横坐标为nY, 纵坐标为nC,可行状态为空心点表示,每次可以在格子上,沿对角线移动一格,也可以沿坐标轴方向移动1格,或沿坐标轴方向移动2格。
第奇数次数状态转移,沿右方,上方,或右上方移动,第偶数次数状态转移,沿左方,下方,或左下方移动。
从(0,0)开始,依次沿箭头方向改变状态,经过11步之后,即可以到达目标状态(3,3),相应的渡河方案为:d1(1,1)--d2(-1,0)--d3(0,2)--d4(0,-1)--d5(2,0)--d6(-1,-1)--d7(2,0)--d8(0,-1)--d9(0,2)--d10(-1,0)--d11(1,1)2-5 试用四元数列结构表示四圆盘梵塔问题,并画出求解该问题的与或图。
用四元数列 (nA, nB, nC, nD) 来表示状态,其中nA 表示A 盘落在第nA 号柱子上,nB 表示B 盘落在第nB 号柱子上,nC 表示C 盘落在第nC 号柱子上,nD 表示D 盘落在第nD 号柱子上。
中南大学考试试卷2006年第2学期,考试时间110分钟人工智能课程48学时,3学分, 考试形式:开卷专业年级:计算机03级总分100分,占总评成绩70 %注:此页不作答题纸,请将答案写在答题纸上一、选择题(共20分,每题2分)1、消解原理是一种用于A、表达式变换的推理规则B、变量运算的推理规则C、一定的子句公式的推理规则 D 、规则演绎的推理规则2、下列哪个系统属于新型专家系统?A、多媒体专家系统B、实时专家系统C、军事专家系统D、分布式专家系统3、示例学习属于下列哪种学习方法?A. 解释学习B。
归纳学习C。
类比学习D。
机械学习4、不属于神经网络常用学习算法的是:A。
有师学习B。
增强学习 C.观察与发现学习 D.无师学习5、人工智能应用研究的两个最重要最广泛领域为:A. 专家系统、自动规划B. 专家系统、机器学习C. 机器学习、智能控制D。
机器学习、自然语言理解6、下列搜索方法中不属于盲目搜索的是:A。
等代价搜索B.宽度优先搜索C.深度优先搜索D.有序搜索7、被认为是人工智能“元年”的时间应为:A、1948年B、1946年C、1956年D、1961年8、被誉为国际“人工智能之父”的是:A、图灵(Turing)B、费根鲍姆(Feigenbaum)C、傅京孙(K。
S.Fu)D、尼尔逊(Nilsson)9、语义网络的组成部分为:A、框架和弧线B、状态和算符C、节点和链D、槽和值10、尽管人工智能学术界出现“百家争鸣”的局面,但是,当前国际人工智能的主流派仍属于:A、连接主义B、符号主义C、行为主义D、经验主义二、填空题(共20分,每一填空处1分)1、机器学习系统由____________、____________、____________和____________几部分构成.2、人工智能是计算机科学中涉及研究、设计和应用____________的一个分支,它的近期目标在于研究用机器来____________的某些智力功能。
梵塔问题实验报告实验目的1.熟悉和掌握问题规约法的原理、实质和规约过程2.理解规约图的表示方法3.熟悉并掌握递归解决问题的思想实验原理1.利用问题规约法的原理进行问题的分析与描述2.利用递归思想进行问题的解决实验条件1.Window NT/xp/7及以上的操作系统2.内存在512M以上3.CPU在奔腾II以上实验内容梵塔问题源于印度古老的一个传说.相传开天辟地的神勃拉玛创造世界时在印度北部的佛教圣地的圣庙里,安放了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
值班僧侣按照法则日夜不停地搬运,当搬运完成时世界将在一声霹雳中毁灭。
实验分析我们假设把该任务交给一个僧人,为了方便叙述,将他编号为64.僧人自然会这样想:假如有另外一个僧人能有办法将63个盘子从一个座移到另一个座,那么问题就解决了,此时僧人64只需这样做:1.命令僧人63将63个盘子从A座移到C座2.自己将最底下的最大的一个盘子从A座移到C座3.再命令僧人63将63个盘子从B座移到C座为了解决将63个盘子从A座移到B座的问题,僧人63又想:如果能再有一个僧人62能将62个盘子移动到另一座,我就能将63个盘子从A座移动到B座.他是这样做的:1.命令僧人62将62个盘子从A移动到C2.自己将一个盘子从A座移动到B座3.再命令僧人62将62个盘子移到B座再进行一次递归.如此“层层下放”,直到后来找到第2个僧人,让他完成将2个盘子从一个座移到另一个座,进行到此,问题就解决了。
最后找到第1个僧人,让他完成将一个盘子从一个座移动到另一个座,至此,全部工作已经完成,该烦他问题得到解决.实验步骤⑴主程序流程图主程序流程图⑵梵塔求解流程图梵塔问题递归过程流程图程序代码#include <stdio.h〉#include 〈graphics.h>#include 〈time.h>#include <dos。
人工智能考试试卷及答案___考试试卷2011年第2学期,考试时间110分钟一、选择题(共20分,每题2分)1、消解原理是一种用于表达式变换的推理规则。
2、下列哪个系统属于新型专家系统?答案为D,即分布式专家系统。
3、示例研究属于归纳研究方法。
4、不属于神经网络常用研究算法的是观察与发现研究。
5、人工智能应用研究的两个最重要最广泛领域为专家系统、机器研究。
6、下列搜索方法中不属于盲目搜索的是有序搜索。
7、被认为是人工智能“元年”的时间应为1956年。
8、被誉为国际“人工智能之父”的是___(___)。
9、语义网络的组成部分为节点和链、槽和值。
10、尽管人工智能学术界出现“百家争鸣”的局面,但是,当前国际人工智能的主流派仍属于符号主义。
二、填空题(共20分,每一填空处1分)1、机器研究系统由数据集、研究算法、模型和预测器几部分构成。
2、人工智能是计算机科学中涉及研究、设计和应用人类智能的一个分支,它的近期目标在于研究用机器来模拟实现某些智力功能。
3、规则演绎系统根据推理方向可分为正向推理、反向推理以及双向推理等。
4、计算智能是人工智能研究的新内容,涉及神经网络、进化计算和模糊系统等。
5、启发式搜索是一种利用启发式信息的搜索,估价函数在搜索过程中起的作用是评估当前状态与目标状态之间的距离。
3)P(qian)->P(sun)目标:P(sun)消解反演证明过程:1.用条件(2)进行消解,得到P(sun)∨P(zhao)∨P(qian)2.用条件(3)进行消解,得到P(sun)∨P(zhao)3.用条件(1)进行消解,得到P(sun)因此,一定会派___。
6、按照题目要求,对于第一问,需要进行A*搜索,列出头三步搜索中的OPEN、CLOSED表的内容和当前扩展节点的f值。
具体的搜索过程和结果如下:步骤。
OPEN表。
CLOSED表。
当前扩展节点f值1.S(5)。
-。
52.A(5)+B(6)。
S(5)。
63.C(6)+A(7)+B(8)。
可编辑修改精选全文完整版人工智能及其应用(蔡自兴)课后答案第二章知识表示方法2-1 状态空间法、问题归约法、谓词逻辑法和语义网络法的要点是什么?它们有何本质上的联系及异同点?答:状态空间法:基于解答空间的问题表示和求解方法,它是以状态和算符为基础来表示和求解问题的。
一般用状态空间法来表示下述方法:从某个初始状态开始,每次加一个操作符,递增的建立起操作符的试验序列,直到达到目标状态为止。
问题规约法:已知问题的描述,通过一系列变换把此问题最终变成一个子问题集合:这些子问题的解可以直接得到,从而解决了初始问题。
问题规约的实质:从目标出发逆向推理,建立子问题以及子问题的子问题,直至最后把出示问题规约为一个平凡的本原问题集合。
谓词逻辑法:采用谓词合式公式和一阶谓词算法。
要解决的问题变为一个有待证明的问题,然后采用消解定理和消解反演莱证明一个新语句是从已知的正确语句导出的,从而证明这个新语句也是正确的。
语义网络法:是一种结构化表示方法,它节点和弧线或链组成。
节点用于表示物体、概念和状态,弧线用于表示节点间的关系。
语义网络的解答是一个经过推理和匹配而得到的具有明确结果的新的语义网络。
语义网络可用于表示多元关系,扩展后可以表示更复杂的问题2-2 设有3个传教士和3个野人来到河边,打算乘一只船从右岸渡到左岸去。
该船的负载能力为两人。
在任何时候,如果野人人数超过传教士人数,那么野人就会把传教士吃掉。
他们怎样才能用这条船安全地把所有人都渡过河去?用Si(nC, nY) 表示第i次渡河后,河对岸的状态,nC表示传教士的数目,nY表示野人的数目,于总人数的确定的,河对岸的状态确定了,河这边的状态也即确定了。
考虑到题目的限制条件,要同时保证,河两岸的传教士数目不少于野人数目,故在整个渡河的过程中,允许出现的状态为以下3种情况: 1. nC=0 2. nC=33. nC=nY>=0 (当nC不等于0或3)用di(dC, dY)表示渡河过程中,对岸状态的变化,dC表示,第i次渡河后,对岸传教士数目的变化,dY表示,第i次渡河后,对岸野人数目的变化。
《人工智能》课后习题答案第一章绪论1.1答:人工智能就是让机器完成那些如果由人来做则需要智能的事情的科学。
人工智能是相对于人的自然智能而言,即用人工的方法和技术,研制智能机器或智能系统来模仿延伸和扩展人的智能,实现智能行为和“机器思维”,解决需要人类专家才能处理的问题。
1.2答:“智能”一词源于拉丁“Legere”,意思是收集、汇集,智能通常用来表示从中进行选择、理解和感觉。
所谓自然智能就是人类和一些动物所具有的智力和行为能力。
智力是针对具体情况的,根据不同的情况有不同的含义。
“智力”是指学会某种技能的能力,而不是指技能本身。
1.3答:专家系统是一个智能的计算机程序,他运用知识和推理步骤来解决只有专家才能解决的复杂问题。
即任何解题能力达到了同领域人类专家水平的计算机程序度可以称为专家系统。
1.4答:自然语言处理—语言翻译系统,金山词霸系列机器人—足球机器人模式识别—Microsoft Cartoon Maker博弈—围棋和跳棋第二章知识表达技术2.1解答:(1)状态空间(State Space)是利用状态变量和操作符号,表示系统或问题的有关知识的符号体系,状态空间是一个四元组(S,O,S0,G):S—状态集合;O—操作算子集合;S0—初始状态,S0⊂S;G—目的状态,G⊂S,(G可若干具体状态,也可满足某些性质的路径信息描述)从S0结点到G结点的路径被称为求解路径。
状态空间一解是一有限操作算子序列,它使初始状态转换为目标状态:O1 O2 O3 OkS0→−−−S1→−−−S2→−−−……→−−−G其中O1,…,Ok即为状态空间的一个解(解往往不是唯一的)(2)谓词逻辑是命题逻辑的扩充和发展,它将原子命题分解成客体和谓词两个部分。
与命题逻辑中命题公式相对应,谓词逻辑中也有谓词(命题函数)公式、原子谓词公式、复合谓词公式等概念。
一阶谓词逻辑是谓词逻辑中最直观的一种逻辑。
(3)语义网络是一种采用网络形式表示人类知识的方法。
人工智能及其应用第四版答案【篇一:人工智能及其应用习题参考答案第9章】txt>9-l分布式人工智能系统有何特点试与多艾真体系统的特性加以比较。
分布式人工智能系统的特点:(1)分布性系统信息(数据、知识、控制)在逻辑上和物理上都是分布的(2)连接性各个子系统和求解机构通过计算机网络相互连接(3)协作性各个子系统协调工作(4)开放性通过网络互连和系统的分布,便于扩充系统规模(5)容错性具有较多的冗余处理结点、通信路径和知识,提高工作的可靠性(6)独立性系统把求解任务归约为几个相对独立的子任务,降低了问题求解及软件开发的复杂性9-2什么是艾真体你对agent的译法有何见解agent是能够通过传感器感知其环境,并借助执行器作用于该环境的实体,可看作是从感知序列到动作序列的映射。
其特性为:行为自主性,作用交互性,环境协调性,面向目标性,存在社会性,工作协作性,运行持续性,系统适应性,结构分布性, 功能智能性把agent译为艾真体的原因主要有:(1)一种普遍的观点认为,agent是一种通过传感器感知其环境,并通过执行器作用于该环境的实体。
(2)“主体” 一词考虑到了agent具有自主性,但并未考虑agent 还具有交互性,协调性,社会性,适应性和分布性的特性(3)“代理”一词在汉语中已经有明确的含义,并不能表示出agent的原义(4)把agent译为艾真体,含有一定的物理意义,即某种“真体” 或事物,能够在十分广泛的领域内得到认可(5)在找不到一个确切和公认的译法时,宜采用音译9-3艾真体在结构上有何特点在结构上又是如何分类的每种结构的特点为何真体=体系结构+程序(1)在计算机系统中,真体相当于一个独立的功能模块,独立的计算机应用系统。
(2)真体的核心部分是决策生成器或问题求解器,起到主控作用(3)真体的运行長一个或多个进程,并接受总体调度(4)各个真体在多个计算机cpu上并行运行,其运行环境由体系结构支持。
梵塔问题实验报告实验目的1.熟悉和掌握问题规约法的原理、实质和规约过程2.理解规约图的表示方法3.熟悉并掌握递归解决问题的思想实验原理1.利用问题规约法的原理进行问题的分析与描述2.利用递归思想进行问题的解决实验条件1.Window NT/xp/7及以上的操作系统2.内存在512M以上3.CPU在奔腾II以上实验内容梵塔问题源于印度古老的一个传说。
相传开天辟地的神勃拉玛创造世界时在印度北部的佛教圣地的圣庙里,安放了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
值班僧侣按照法则日夜不停地搬运,当搬运完成时世界将在一声霹雳中毁灭。
实验分析我们假设把该任务交给一个僧人,为了方便叙述,将他编号为64。
僧人自然会这样想:假如有另外一个僧人能有办法将63个盘子从一个座移到另一个座,那么问题就解决了,此时僧人64只需这样做:1.命令僧人63将63个盘子从A座移到C座2.自己将最底下的最大的一个盘子从A座移到C座3.再命令僧人63将63个盘子从B座移到C座为了解决将63个盘子从A座移到B座的问题,僧人63又想:如果能再有一个僧人62能将62个盘子移动到另一座,我就能将63个盘子从A座移动到B座。
他是这样做的:1.命令僧人62将62个盘子从A移动到C2.自己将一个盘子从A座移动到B座3.再命令僧人62将62个盘子移到B座再进行一次递归。
如此“层层下放”,直到后来找到第2个僧人,让他完成将2个盘子从一个座移到另一个座,进行到此,问题就解决了。
最后找到第1个僧人,让他完成将一个盘子从一个座移动到另一个座,至此,全部工作已经完成,该烦他问题得到解决。
实验步骤⑴主程序流程图主程序流程图⑵梵塔求解流程图梵塔问题递归过程流程图程序代码#include <stdio.h>#include <graphics.h>#include <time.h>#include <dos.h>#include <math.h>#define PAOGAO 190 /*动画抛高,数值越小越高*/#define PANHOU 10/*#define PANAMOUNT 19盘子数*/int PANAMOUNT;typedef int pans;typedef struct s_pillar{int amount;int x,y;pans pan[20]; /*存放每个盘的代号*/}pillars;pillars pillar[4]; /*三个台柱*/int movecount=0; /*移动计数*/void drawpillar(pillars p);void init(); /*初始化函数*/void drawmat(char *mat,int matsize,int x,int y,int color); /* 点陈汉字*/ void drawpan(pans p,int x,int y);人工智能void zimu(); /*显示字幕*/void drawpps(); /*画装盘的台柱*/void hanoi(); /*主算法*/void hanoi(int n,char one,char two,char three);void sdelay(int delay_t); /*函数申明*/void finish(); /*完成!*/void main(void) /*主函数*/{printf("\n\tplease input n(n<=19): ");/*输入要演示的盘子数*/scanf("%d",&PANAMOUNT);if(PANAMOUNT<1||PANAMOUNT>19) /*越界的话n当19处理*/PANAMOUNT=19 ;init();drawpps();hanoi(PANAMOUNT,'a','b','c');finish();}void init() /* 初始化函数*/{int gd=DETECT,gm ;int i,n,color ;clrscr();initgraph(&gd,&gm,"c:\\tc");cleardevice();pillar[1].amount = PANAMOUNT;pillar[1].x = 105;pillar[1].y = 405;for(i=1;i<=pillar[1].amount;i++){pillar[1].pan[i]=pillar[1].amount-i+1;}pillar[2].amount = 0;pillar[2].x = 320;pillar[2].y = 405;pillar[3].amount = 0;pillar[3].x = 527;pillar[3].y = 405;setcolor(YELLOW); /*柱座标记*/settextstyle(0,0,2);人工智能outtextxy(105,418,"A");outtextxy(320,418,"B");outtextxy(527,418,"C");setcolor(YELLOW); /*画框*/setlinestyle(SOLID_LINE,0,NORM_WIDTH);line(0,0,0,479);line(0,0,639,0);line(639,0,639,479);line(0,479,639,479);line(0,PAOGAO-PANHOU-40,450,PAOGAO-PANHOU-40); /*黄金线*/settextstyle(0,0,1);outtextxy(250,PAOGAO-PANHOU-50,"Press ANY Key to EXIT !"); /*线上字*/zimu();}void drawpillar(pillars p) /*画柱*/{int x,y,mount;x=p.x;y=p.y;mount=p.amount;setfillstyle(SOLID_FILL,BROWN);bar(x,(y-mount*PANHOU-20),x+5,y);bar(x-45,y,x+55,y+5);}void drawmat(char *mat,int matsize,int x,int y,int color)/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/{int i,j,k,n;n=(matsize-1)/8+1;for(j=0;j<matsize;j++)for(i=0;i<n;i++)for(k=0;k<8;k++)if(mat[j*n+i]&(0x80>>k)) /*测试为1的位则显示*/putpixel(x+i*8+k,y+j,color);}void drawpan(pans p,int x,int y){setfillstyle(SOLID_FILL,LIGHTGRAY);bar(x-(5+5*p),y-PANHOU+1,x+(5+5*p),y);setlinestyle(SOLID_LINE,0,NORM_WIDTH);setcolor(BLACK);line(x-(5+5*p),y,x+(5+5*p),y);人工智能line(x-(5+5*p),y+1,x+(5+5*p),y+1);}void clearpan(pans p,int x,int y){setfillstyle(SOLID_FILL,BLACK);bar(x-(5+5*p),y-PANHOU,x+(5+5*p),y);}void drawpps() /*画装盘的台柱*/{pillars p;int i,j;int x,y,mount;for(i=1;i<=3;i++){p = pillar[i];x = p.x;y = p.y;mount = p.amount;drawpillar(p); /*画台柱*/for(j=1; j<=mount ;j++){drawpan(p.pan[j],x,y-PANHOU*(j-1));}}}void hanoi(int n,char one,char two,char three){void move(char x,char y); /*声明*/if(n==1){move(one,three);}else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}}void move(char x,char y){void clearprocess(); /*申明函数*/void action(); /*申明移动动画函数*/int ifrom,ito;pans data;int mountf,mountt;char a[1];char b[1];a[0]=x;a[1]='\0';b[0]=y;b[1]='\0';ifrom = x-96;ito = y-96;mountf = pillar[ifrom].amount; /*数量*/mountt = pillar[ito].amount;data = pillar[ifrom].pan[mountf];pillar[ifrom].amount--; /*出栈*/sdelay(6); /*暂停屏幕*/if(movecount>=15) clearprocess();/*清除步骤提示*/movecount = movecount%15+1; /*模20+1*/setcolor(RED); /*输出移动过程*/settextstyle(TRIPLEX_FONT, HORIZ_DIR, 1);outtextxy(560,30+movecount*10,a);outtextxy(580,30+movecount*10,"--->");outtextxy(620,30+movecount*10,b);setfillstyle(SOLID_FILL,BLACK);/*涂黑_重画*/bar(3,pillar[1].y-PANHOU*19-20,584,412);drawpps(); /*重画*/action(data,pillar[ifrom],pillar[ito]);/*此处添加动画函数*/pillar[ito].amount++; /*入栈*/mountt = pillar[ito].amount;/*刷新数量*/pillar[ito].pan[mountt] = data;drawpps(); /*重画*/}void clearprocess(){int i;setfillstyle(SOLID_FILL,BLACK);for(i=0;i<=16;i++){bar(545,30+i*10,638,40+i*10);sdelay(1); /*动画延迟n个(1/18.2)秒*/}}整数1代表(1/18.2)秒*/void sdelay(int delay_t){clock_t start_time ;start_time=clock();while((clock()-start_time)<delay_t) ; /*循环空语句*/}void action(pans pan,pillars fromp,pillars top) /*移动动画*/{float x1,y1,x2,y2;float p,q,a;int x,y,temp; /*整形变量用与当前帧*/x1 = (float)(fromp.x);y1 = (float)(fromp.y - fromp.amount*PANHOU -20);/*PANHOU为盘厚常数,减20处理,以便避开柱子*/ x2 = (float)(top.x);y2 = (float)(top.y - top.amount*PANHOU);q = -sqrt((y1-PAOGAO)/(y2-PAOGAO)); /*此处注意产生增根*/if(1-q) /*除数不为0*/{a = (x1 - x2*q)/(1-q);}elsea = (x1+x2)/2.0;p = (y2-PAOGAO)/(x2-a)/(x2-a);/*除以平方*/if(x1 <= x2){for(x=floor(x1+0.5); x<floor(x2+0.5); x=x+ 7 ){if(kbhit()) exit(); /*用户按ESC则退出*/y =floor((p*(x-a)*(x-a)+PAOGAO)+0.5);drawpan(pan,x,y);sdelay(1);clearpan(pan,x,y);/*清除轨迹*/}人工智能}else{for(x=floor(x1+0.5); x>floor(x2+0.5); x=x- 7 ){if(kbhit()) exit(); /*用户按ESC则退出*/y = floor((p*(x-a)*(x-a)+PAOGAO)+0.5);drawpan(pan,x,y);sdelay(1);clearpan(pan,x,y);/*清除轨迹*/}}}void finish() /*完成!*/{getch();closegraph();}程序运行效果图人工智能个人实验小结通过本次实验,我学会了熟悉并掌握问题规约法的原理、实质和规约过程,理解了规约图的表示方法,熟悉并掌握递归解决问题的思想。