XXX大工20春《人工智能》大作业题目及要求 - A算法参考答案
- 格式:docx
- 大小:42.55 KB
- 文档页数:30
人工智能大作业题目人工智能大作业题目1、基于A*算法求解八数码问题(1)至少定义3种不同的启发式函数,编程实现求解八数码问题的A*算法;(2)要求用可视化界面演示算法执行过程,应能选择预定义的启发式函数,能随机初始化初始状态,能单步执行,也能连续执行,能画出搜索树,同时标出估价函数在每个节点的各项函数值,能展示OPEN表和CLOSED表的动态变化过程;(3)能统计出扩展节点数和算法执行时间,以便对采用不同启发式函数的A*算法的性能做对比研究。
2、基于A*算法的最优路径规划系统(1)基于真实地图实现,可以是位图背景加栅格坐标数据,也可以直接使用某种格式的GIS (地理信息系统)矢量地图,地图规模不能太小;(2)用户可以设置起点和终点;(3)要求用可视化界面演示算法执行过程,能单步执行,也能连续执行,画出扩展过的所有路径,画出最优路径,能展示OPEN表和CLOSED表的动态变化过程;(4)可考虑路况信息,改进启发式函数,以求更实用。
3、A*算法的改进研究(1)给出改进思路并编程实现改进的算法;(2)结合一个具体问题实验对比改进前后的算法性能。
4、图搜索算法对比研究(1)编程实现广度优先、等待价、深度优先、深度受限、迭代加深、最佳优先搜索算法;(2)要求用可视化界面演示算法执行过程,能单步执行,也能连续执行,能画出搜索树,能展示OPEN表和CLOSED表的动态变化过程;(3)用户可以自定义搜索图,通过实验研究各种图搜索算法的性能。
5、基于α-β剪枝算法的五子棋游戏(1)编写五子棋游戏程序,支持人机对战;(2)编程实现α-β剪枝算法,作为机器方的下棋算法。
6、五子棋机器博弈系统(1)编程实现一个五子棋主控程序,要求有可视化棋盘,有裁判功能,支持通过Socket接口连接选手,有清晰简洁的通信协议,支持循环赛赛程管理;(2)每个同学编写一个五子棋下棋算法,通过Socket接口接入主控程序,与其他机器选手对战。
可编辑修改精选全文完整版(单选题)1: 人工智能作为一门学科,诞生于()年。
A: 1956B: 1999C: 1966D: 1963正确答案: A(单选题)2: 被称为人工智能之父的是()。
A: 比尔盖茨B: 乔布斯C: 图灵D: 约翰麦卡锡正确答案: D(单选题)3: 目前人工智能的主要研究学派是()。
A: 符号主义B: 连接主义C: 行为主义D: 以上都对正确答案: D(单选题)4: 按知识的作用可把知识划分为()知识。
A: 描述性B: 判断性C: 过程性D: 以上都对正确答案: D(单选题)5: 定义谓词如下:COMPUTER(x):x是计算机系的学生;LIKE(x, y):x喜欢y。
张晓辉是一名计算机系的学生,他喜欢编程序。
用谓词公式表示为()。
A: COMPUTER(zhangxh)∧LIKE(zhangxh, programming)B: COMPUTER(programming)∧LIKE( programming, programming)C: COMPUTER(zhangxh)or LIKE(zhangxh, programming)D: 以上都不对正确答案: A(单选题)6: 定义谓词如下:HIGHER(x, y):x比y长得高,定义公式father(x):x的父亲。
李晓鹏比他父亲长得高。
用谓词公式表示为()。
A: HIGHER(lixp, father(lixp))B: HIGHER(father(lixp),lixp )C: father(lixp)D: 以上都不对正确答案: A(单选题)7: 定义谓词如下:boy(x):x是男孩,girl(x):x是女孩,high(x,y):x比y高。
用谓词逻辑表示下列知识,如果马良是男孩,张红是女孩,则马良比张红长得高。
()A: (boy(mal)∧girl(zhangh))→high(mal,zhangh)B: boy(mal)→high(mal,zhangh)C: girl(zhangh)→high(mal,zhangh)D: high(mal,zhangh)→(boy(mal)∧girl(zhangh))正确答案: A(单选题)8: 一阶谓词逻辑表示法的优点是()。
2020年国家开放大学《人工智能》专题形考任务二参考答案判断题现实世界中的规划问题需要先调度,后规划。
×启发式规划的两种方法是减少更多的边或者状态抽象。
×语义网络的表示方法只能表示有关某一事物的知识,无法表示一系列动作、一个事件等的知识。
×下图表示的是前向状态空间搜索。
√人们需要把分类器学习的样本的特点进行量化,这些量化后的数据,如鸢尾花的高度、花瓣的长度、花瓣的宽度等就是鸢尾花的特征。
这些特征都是有效的,可以提供给分类器进行训练。
×状态空间图是对一个问题的表示,通过问题表示,人们可以探索和分析通往解的可能的可替代路径。
特定问题的解将对应状态空间图中的一条路径。
√贝叶斯定理是为了解决频率概率问题提出来的。
×深度学习是计算机利用其计算能力处理大量数据,获得看似人类同等智能的工具。
√分层规划中包含基本动作和高层动作。
√谓词逻辑是应用于计算机的逻辑形式,其逻辑规则、符号系统与命题逻辑是一样的。
×P(A∣B)代表事件A发生的条件下事件B发生的概率。
×人工智能利用遗传算法在求解优化问题时,会把问题的解用“0”和“1”表示。
0,1就是就是“遗传基因”,01组成的字符串,称为一个染色体或个体。
√选择题人们想让智能机器分辨哪个动物是熊猫,就会输入一些数据告诉机器。
如图上所示的“大大的脑袋,黑白两色,黑眼眶,圆耳朵”,这些属于(特征值)。
贝叶斯网络是(朱迪亚·珀尔)首先提出来的。
遗传算法具有(生存+检测)的迭代过程的搜索算法。
也就是说,通过群体的一代代的不断进化,最终收敛到“最适应环境”的个体,从而求得问题的最优解或满意解。
(多选)在A* 算法中,当我们找寻当前节点的相邻子节点时,需要考虑(如果该子节点已经在Open列表中,则我们需要检查其通过当前节点计算得到的F值。
如果比它原有计算的F值更小。
如果更小则更新其F值,并将其父节点设置为当前节点。
学习中心:专业:年级:年春/秋季学号:学生:题目:人工智能课程设计(回归算法)1.谈谈你对本课程学习过程中的心得体会与建议?经过半年的网上学习,我对人工智能这门课程有了初步的认识,人工智能这门课程内容新颖,涉及计算机知识非常广,学习起来极富挑战性。
在学习过程中我始终跟随老师视频讲解,严格要求自己,收获很大。
老师的讲解深入浅出,在学识知识的同时,也激发了我的学习兴趣。
我由衷的感谢老师的教导,感谢老师们不辞辛苦录制课件,感谢自己能获得这次宝贵的学习机会。
2.《人工智能》课程设计,从以下5个题目中任选其一作答。
《人工智能》课程设计题目二:回归算法要求:(1)撰写一份word文档,里面包括(常见的回归算法、基于实例的算法具体细节)章节。
(2)常见的回归算法包括:最小二乘法(Ordinary LeastSquare),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing),请选择一个算法描述下算法核心思想(3)随意选用一个实例实现你所选择的回归算法。
答:(1)最小二乘法算法核心思想最小二乘法原理如下:根据一组给定的实验数据,求出自变量x与因变量y的函数关系,只要求在给定点上的误差的平方和最小.当时,即(1)这里是线性无关的函数族,假定在上给出一组数据,以及对应的一组权,这里为权系数,要求使最小,其中(2)(2)中实际上是关于的多元函数,求I的最小值就是求多元函数I的极值,由极值必要条件,可得(3)根据内积定义引入相应带权内积记号(4)则(3)可改写为这是关于参数的线性方程组,用矩阵表示为(5) (5)称为法方程.当线性无关,且在点集上至多只有n个不同零点,则称在X上满足Haar条件,此时(5)的解存在唯一。
学习中间:专业:年级:学号:学生:题目:1.谈谈你对本课程学习过程中的心得当会与主张?经过这门课程的学习,我对人工智能有了一些简略的理性知道,我晓得了人工智能从诞生到开展阅历一个绵长的过程,许多人为此做出了不懈的尽力。
我觉得这门课程是一门赋有应战性的科学,而从事这项工作的人不只要懂得计算机常识,还需求懂得心思学和哲学。
2. 《人工智能》课程设计, 从以下5个题目中任选其一作答。
《人工智能》课程设计留意:从以下5个题目中任选其一作答。
总则:不约束编程语言,提交word文档,不要提交紧缩包作业提交:大作业上交时文件名写法为:[名字奥鹏卡号学习中间](如:戴卫东101410013979浙江台州奥鹏学习中间[1]VIP)以附件word文档方式上交离线作业(附件的巨细约束在10M以内),挑选已完结的作业(留意命名),点提交即可。
如下图所示。
留意事项:独立完结作业,禁绝抄袭其别人或许请人代做,如有相同作业,分数以零分计!题目一:A*算法要求:(1)编撰一份word文档,里边包含(算法思路、算法程序框图、重排九宫疑问)章节。
(2)算法思路:简略介绍该算法的根本思想,100字摆布即可。
(3)算法程序框图:制作流程图或原理图,从算法的开端到完毕的程序框图。
(4)关于重排九宫疑问的启示式函数: f (x)= p(x)+3s(x)p(x)是x结点和方针结点比较每个将牌“离家”的最短间隔之和;s(x)是:每个将牌和方针比较,若该将牌的后继和方针中该将牌的后继不一样,则该将牌得2分,一样则该将牌得0分,中心方位有将牌得1分,没将牌得0分。
关于给定的初始格式和方针状况请按此启示式函数给出查找的状况空间图。
初始格式方针状况题目二:回归算法要求:(1)编撰一份word文档,里边包含(常见的回归算法、根据实例的算法详细细节)章节。
(2)常见的回归算法包含:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐渐式回归(Stepwise Regression),多元自习惯回归样条(Multivariate Adaptive Regression Splines)以及本地散点滑润估量(Locally Estimated Scatterplot Smoothing),请挑选一个算法描绘下算法中心思想(3)随意选用一个实例完成你所挑选的回归算法。
(单选题)1: 知识操作功能包括知识的()、查询和统计等。
A: 添加
B: 删除
C: 修改
D: 其他选项都正确
正确答案: D
(单选题)2: 支撑神经网络的关键技术DNN是指()。
A: 深层神经网络
B: 深度学习
C: 矩阵运算
D: 选择、交叉、变异
正确答案: A
(单选题)3: 进化算法包括()和遗传编程。
A: 遗传算法
B: 进化规划
C: 进化策略
D: 其他选项都正确
正确答案: D
(单选题)4: 进化算法中,仿效生物的遗传方式,主要采用复制、交换、突变这3种遗传操作,衍生下一代的个体。
其中复制也可以称为()操作。
A: 选择
B: 交叉
C: 重组
D: 变异
正确答案: A
(单选题)5: 进化算法中,仿效生物的遗传方式,主要采用复制、交换、突变这3种遗传操作,衍生下一代的个体。
其中交换也可以称为()操作。
A: 选择
B: 交叉
C: 克隆
D: 变异
正确答案: B
(单选题)6: ()不是进化算法搜索方式的特点。
A: 自适应搜索
B: 串行式搜索
C: 是黑箱式结构
D: 通用性强
正确答案: B。
学习中心:专业:年级:年春/秋季学号:学生:题目:人工智能课程设计(回归算法)1.谈谈你对本课程学习过程中的心得体会与建议?经过半年的网上学习,我对人工智能这门课程有了初步的认识,人工智能这门课程内容新颖,涉及计算机知识非常广,学习起来极富挑战性。
在学习过程中我始终跟随老师视频讲解,严格要求自己,收获很大。
老师的讲解深入浅出,在学识知识的同时,也激发了我的学习兴趣。
我由衷的感谢老师的教导,感谢老师们不辞辛苦录制课件,感谢自己能获得这次宝贵的学习机会。
2.《人工智能》课程设计,从以下5个题目中任选其一作答。
《人工智能》课程设计题目二:回归算法要求:(1)撰写一份word文档,里面包括(常见的回归算法、基于实例的算法具体细节)章节。
(2)常见的回归算法包括:最小二乘法(Ordinary LeastSquare),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing),请选择一个算法描述下算法核心思想(3)随意选用一个实例实现你所选择的回归算法。
答:(1)最小二乘法算法核心思想最小二乘法原理如下:根据一组给定的实验数据,求出自变量x与因变量y的函数关系,只要求在给定点上的误差的平方和最小.当时,即(1)这里是线性无关的函数族,假定在上给出一组数据,以及对应的一组权,这里为权系数,要求使最小,其中(2)(2)中实际上是关于的多元函数,求I的最小值就是求多元函数I的极值,由极值必要条件,可得(3)根据内积定义引入相应带权内积记号(4)则(3)可改写为这是关于参数的线性方程组,用矩阵表示为(5) (5)称为法方程.当线性无关,且在点集上至多只有n个不同零点,则称在X上满足Haar条件,此时(5)的解存在唯一。
一、简答题(每小题4分)1.什么是人工智能?人工智能研究的基本内容有哪些?答:人工智能(Art辻icial Intelligence),英文缩写为AI0它是研究开发用于和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
人工智能学科研究的主要内容包括:知识来表示、自动推理和搜索方法、机器学习和知识获取、知识处理系统、自然语言理解、计算机视觉、自动程序设计,智能机器人等方而。
2.何谓知识表示?答:矢II识表示(knowledge representation)是指把知识客体中的矢II识因子和知识关联起来,便于人们识别和理解知识。
知识表是知识组织的前提和基础,任何知识组织方法都是要建立在知识表示的基础上。
知识表示有主观知识表示和客观知识表示两种。
3.产生式的基本形式是什么?什么是产生式系统?它由哪几部分组成?答:产生式的基本形式是“IFPTHENQ” ,英中,P是产生式的前提,用于指岀该产生式是否可用的条件:Q是一组结论或操作,用于指出前提P所指示的条件被满足时,应该得出的结论或应该执行的操作。
产生式系统(production system)是指认知心理学程序表征系统的一种。
为解决某一问题或完成某一作业而按一立层次联结组成的认知规则系统。
由全局数据库、产生式规则和控制系统三部分组成。
每一产生式规则由条件(即当前的状态或情境)和行动两部分组成, 其基本规则是“若条件X,则实施行动Y”,即当一个产生式中的条件得到满足,则执行该产生式规定的某个行动。
产生式系统由下列3部分组成:一个总数据库(global database),它含有与具体任务有关的信息;随着应用情况的不同,这些数据库可能像数字矩阵那样简单,也可能像检索文件结构那样复杂。
一套规则,它对数据库进行操作运算。
每条规则由左右两部分组成,左部鉴别规则的适用性或先决条件,右部描述规则应用时所版完成的动作。
应用规则来改变数据库。
一个控制策略,它确泄应该采用哪一条适用规则,而且当数處库的终止条件满足时,就停权止计算。
1.()是普遍推广机器学习的第一人。
(2.0分)A.约翰·冯·诺依曼B.约翰·麦卡锡C.唐纳德·赫布D.亚瑟·塞缪尔√答对C我的答案:2.当我们需要寻求健康咨询服务时,应该拨打的热线电话是()。
(2.0分)A.12315B.12301C.12345D.12320√答对D我的答案:3.()由于产品全球化市场竞争加剧和信息技术革命的推动, 围绕提高制造业水平的新概念和新技术不断涌现, 在此背景下, 将新兴的人工智能技术应用于制造领域使“智能制造”的概念孕育而生, 并促进了智能制造技术和智能制造系统的研究。
(2.0分)A.20世纪70年代B.20世纪80年代C.20世纪90年代D.21世纪初√答对C我的答案:4.我国于()年发布了《国务院关于印发新一代人工智能发展规划的通知》。
(2.0分)A.2016B.2017C.2018D.2019√答对B我的答案:5.在农业领域的()环节,智能的农业机器人可以利用图像识别技术获取农作物的生长状况,判断哪些杂草需要清除,判断哪里需要灌溉、施肥、打药,并立即执行。
(2.0分)A.产前B.产中C.产后D.全程√答对B我的答案:6.()是人工智能发展的硬道理,没有它的人工智能是没有用的。
(2.0分)A.数据B.应用C.逻辑D.算法√答对B我的答案:7.新生儿的正常脉搏为每分钟()次。
(2.0分)A.60~80B.70~90C.80~100D.90~120√答对D我的答案:8.2016年8月,日本电视台报道称,东京大学医学研究所通过运用IBM的人工智能平台Watson仅用10分钟就诊断出了资深医师难以判别出来的()。
(2.0分)A.甲状腺癌B.胰腺癌C.淋巴癌D.白血病×答错C我的答案:9.智能制造的本质是通过新一代信息技术和先进制造技术的深度融合,实现跨企业价值网络的横向集成,来贯穿企业设备层、控制层、管理层的纵向集成,以及产品全生命周期的端到端集成,而()是实现全方位集成的关键途径。
大工20春《人工智能》在线作业1单选题1.某单位派遣出国人员,有赵、钱、孙三位候选人,三人中至少派遣一人。
设用P(x)表示派x出国,zhao、qian、sun分别表示三人,将该条件用谓词公式表示出来()。
A.P(zhao)∨P(qian)∨P(sun)B.P(zhao)∧P(qian)∨P(sun)C.P(zhao)∨P(qian)∧P(sun)D.其他选项都不对答案:A2.某单位派遣出国人员,有赵、钱、孙三位候选人,如果钱去,则一定派孙去。
设用P(x)表示派x出国,zhao、qian、sun分别表示三人,将该条件用谓词公式表示出来()。
A.P(qian)->P(sun)B.P(sun)->P(qian)C.P(zhao)->P(sun)D.P(qian)->P(zhao)答案:A3.现代人工智能的英文简称是()。
A.BIB.AIC.CID.AMD答案:B4.约翰?麦卡锡被称为()。
A.人工智能之父B.图灵奖创始人C.计算机之父D.其它选项都不对答案:A5.一台机器要通过图灵测试,它需要有什么能力()?A.自然语言处理B.知识表示和自动推理C.机器学习D.其他选项都正确答案:D6.()年,第五届国际人工智能联合会上《人工智能的艺术:知识工程课题及实例研究》的特约文章中,系统地阐述了专家系统的思想,并提出了知识工程的概念。
A.1977B.1978C.1956D.1957答案:A7.符号主义是以()为核心的方法。
A.符号传输B.符号处理C.信息传输D.信息处理答案:B8.符号主义的主要特征()。
A.立足于逻辑运算和符号操作B.知识可用显示的符号表示C.便于模块化,能与传统的符号数据库进行连接D.其他选项都正确答案:D9.行为主义又称为()或控制论学派。
A.进化主义B.符号主义C.连接主义D.互信主义答案:A10.机器学习主要有()、解释学习、发现学习、遗传学习和连接学习等。
A.机械学习B.归纳学习C.类比学习D.其它选项都正确答案:D判断题1.人工智能的最终目标:建立关于智能的理论和让智能机器达到人类的智能水平(人工智能体)。
XXX大工20春《人工智能》大作业题目及要求 - A算法参考答案给定一个3x3的九宫格,其中有8个数字和1个空格,要求通过移动数字的位置,将初始状态转化为目标状态。
二、A*算法基本思想A*算法是一种启发式搜索算法,其基本思想是综合考虑当前状态到目标状态的估价函数和已经走过的路径长度,选择下一步最有可能到达目标状态的节点进行搜索。
其中,估价函数是指从当前状态到目标状态的最短距离的估计值。
三、算法程序框图此处应插入算法程序框图,具体细节请见word文档)四、重排九宫问题的启发式函数根据题目要求,给定的启发式函数为f(x)=p(x)+3s(x)p(x),其中p(x)表示x结点和目标结点相比每个将牌“离家”的最短距离之和,s(x)表示每个将牌和目标相比,若该将牌的后继和目标中该将牌的后继不同,则该将牌得2分,相同则该将牌得1分,中间位置有将牌得1分,没将牌得分。
根据该启发式函数,我们可以得到搜索的状态空间图如下:此处应插入搜索的状态空间图,具体细节请见word文档)XXX《人工智能》课程设计题目描述给定一个3×3的棋盘,棋盘上有8个棋子,编号为1~8,现在有一个空格,即棋盘上只有8个棋子,空格可以与其上、下、左、右四个方向相邻的棋子交换位置,现在给定一个初始状态和一个目标状态,请你求出从初始状态到目标状态最少需要移动多少步。
输入格式第一行输入一个字符串,表示初始状态,其中字符1~8表示棋子,字符.表示空格,例如:xxxxxxxx.第二行输入一个字符串,表示目标状态,格式与初始状态相同。
输出格式输出一个整数,表示最少移动的步数。
如果无法从初始状态到达目标状态,则输出-1.输入样例1:xxxxxxxx.123.输出样例1:3输入样例2:xxxxxxxx.xxxxxxxx.输出样例2:22问题分析将每一个状态作为一个结点容易想到可以用广搜的方法解决,这种方法简单,但是就算是加入XXX判重也会搜索很多的无用结点。
我们打算用A*算法解决这个问题,既然确定了用A*算法,那么我们首先应该确定估价函数h(x),估价函数的选取直接决定A*算法的效率,一般对于八数码问题有三种估价函数的选法:以不在位的数码的个数为估价函数以不在位的数码归位所需的最短距离和即曼哈顿距离为估价函数将逆序对数作为估价函数可以证明前两种都是乐观估计,最后一种不是,因此前两种都可以作为八数码问题的估价函数,但是你的估计值与真实值越近所需要搜索的状态越少,很明显第一种方法太乐观了(估价函数的选取直接决定算法的效率),因此我们采用第二种方法作为八数码问题的估价函数。
解决了估价函数的问题之后,我们需要解决的第二个问题是判重。
我们最初想到的是使用集合set,这种方法最简单,但是很不幸,这种方法耗时最长。
如果时间要求较高,这种情况很容易超时。
因此,我们不使用这种方法。
判重问题自然而然地想到了哈希表。
但是现在又有一个问题:如何创建哈希表?也就是哈希函数怎么写?这个东西比较有技巧。
幸运的是,对于这种问题,有一种现成的方法可以解决,那就是XXX展开。
此外,还有一个问题,就是有些问题是无解的。
我们不希望进行很大力气的搜索之后发现无解。
最好是能提前预知。
值得庆幸的是,八数码无论怎么移动,逆序的奇偶性不变。
因此,我们可以直接通过O(1)的时间判断开始和目标结点的逆序奇偶性是否相同就可以了。
有了上面的分析之后,程序就可以写出来了。
下面是核心函数int Astar(int[][COL],int[][COL],int,intpath[]),其它函数供Astar函数调用,起辅助作用,还有几个函数仅仅是为了使界面更友好。
所有函数均有注释说明。
其中可行性判断函数需要对八数码问题进行数学上的简单分析,哈希函数的设计有些技巧,其他函数的原理都是显然的。
如果程序运行有问题,可以和我联系。
includeincludeincludeincludeincludedefine COL 3define MAXSTEP 70using namespace std;void output(int[][COL]);/*输出函数*/void input(int [][COL]);/*输入函数*/int Astar(int [][COL],int [][COL],int,int path[]);/*核心函数,起始,终止,深度,方向*/bool eq(int from[][COL],int to[][COL]);/*判断起始与终止是否相同*/bool change(int from[][COL],const int i,const int j,const intstep);/*判断当前状态是否可以进行相应移动,并进行状态转变*/int value(const int from[][COL]。
const int to[][COL]) {估价函数 */int cnt = 0;for(int i = 0.i < ROW。
i++) {for(int j = 0.j < COL。
j++) {if(from[i][j]。
= 0 && from[i][j]。
= to[i][j]) {cnt++;return cnt;void output_tow(int from[][COL]。
int to[][COL]) { 输出函数,和上面的output函数差不多 */printf("当前状态:\n");output(from);printf("目标状态:\n");output(to);bool possible(int from[][COL]。
int to[][COL]) {可行性判断 */int cnt1 = t2 = 0;for(int i = 0.i < ROW。
i++) {for(int j = 0.j < COL。
j++) {for(int k = i。
k < ROW。
k++) {int l = 0;if(k == i) {l = j + 1;for(。
l < COL。
l++) {if(from[i][j]。
= 0 && from[k][l]。
= 0 && from[i][j]。
from[k][l]) {cnt1++;if(to[i][j]。
= 0 && to[k][l]。
= 0 && to[i][j]。
to[k][l]) { cnt2++;return cnt1 % 2 == cnt2 % 2;int h[9] = {.5040.720.120.24.6.2.1.1}。
/* hash函数用到的数据,8-0的阶乘 */bool ha[];struct Node {int path[MAXSTEP]。
/* 路径信息 */int expend。
/* 权重 */int deep。
/* 深度 */int x[COL][COL]。
/* 状态信息 */struct cmp {bool operator() (const Node A。
const Node B) {return A.expend。
B.expend;int pa[MAXSTEP];rity_queue。
cmp。
q。
/* 优先队列 */Node make(int from[][COL]。
int deep。
int v。
int path[]。
int step) {转换函数 */Node tmp;memcpy(tmp.x。
from。
sizeof(tmp.x));memcpy(tmp.path。
path。
sizeof(tmp.path));tmp.path[step] = v;tmp.deep = deep;tmp.expend = deep + value(from。
goal);return tmp;int main() {int from[COL][COL];int to[COL][COL];int k = 0.c;memset(ha。
0.sizeof(ha));memset(pa。
-1.sizeof(pa));printf("请按行输入原始九宫格,空白的输入0\n");input(from);printf("原始九宫格为:\n");output(from);printf("请按行输入目标九宫格,空白的输入0\n"); input(to);printf("目标九宫格为:\n");output(to);printf("按任意键显示执行步骤:\n");fflush(stdin);getchar();if(!possible(from。
to)) {printf("无解\n");return 0;Node start = make(from。
0.hash(from)。
pa。
0); q.push(start);while(!q.empty()) {Node now = ();q.pop();if(ha[now.expend]) {continue;ha[now.expend] = true;if(now.deep == MAXSTEP) { output_tow(now.x。
to);printf("成功!\n");for(int i = 0.i <= now.deep。
i++) { printf("%d "。
now.path[i]);printf("\n");return 0;int x = 0.y = 0;for(int i = 0.i < ROW。
i++) {for(int j = 0.j < COL。
j++) {if(now.x[i][j] == 0) {x = i;y = j;break;for(int i = 0.i < 4.i++) {int nx = x + dx[i];int ny = y + dy[i];if(nx = ROW || ny = COL) {continue;Node next = make(now.x。
now.deep + 1.hash(now.x)。
now.path。
now.deep + 1);swap(next.x[x][y]。
next.x[nx][ny]);int v = hash(next.x);if(ha[next.expend] || (pa[v]。
= -1 && pa[v] <= next.deep)) { continue;q.push(next);pa[v] = next.deep;printf("无解\n");return 0;cout << "请输入初始状态(0-8的数字,0代表空格):" << endl;input(from);cout << "请输入目标状态(0-8的数字,0代表空格):" << endl;input(to);if (!check(from。