版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、人工智能实验一报告题目:采用A*算法解决八数码问题姓名:张博涵学号:081110317专业:信息与计算科学提交日期:2014-05-22- -structSpringLink*next;/指向兄第结点SPLink,*PSPLink;PNodeopen;PNodeclosed;/开始状态与目标状态statusstartt=0,1,2,3,4,5,6,7,8;statustarget=1,4,2,3,5,8,6,7,0;/初始化一个空链表voidinitLink(PNode&Head)Head=(PNode)malloc(sizeof(NNode);Head-next=NULL;/判断链表是否为空
2、boolisEmpty(PNodeHead)if(Head-next=NULL)returntrue;elsereturnfalse;/从链表中拿出一个数据voidpopNode(PNode&Head,PNode&FNode)if(isEmpty(Head)FNode=NULL;return;FNode=Head-next;Head-next=Head-next-next;FNode-next=NULL;/向结点的最终后继结点链表中添加新的子结点voidaddSpringNode(PNode&Head,PNodenewData)PSPLinknewNode=(PSPLink)malloc(si
3、zeof(SPLink);newNode-pointData=newData;newNode-next=Head-child;Head-child=newNode;/释放状态图中存放结点后继结点地址的空间voidfreeSpringLink(PSPLink&Head)PSPLinktmm;while(Head!=NULL)tmm=Head;Head=Head-next;free(tmm);释放open表与closed表中的资源voidfreeLink(PNode&Head)PNodetmn;tmn=Head;Head=Head-next;free(tmn);while(Head!=NULL)/
4、首先释放存放结点后继结点地址的空间freeSpringLink(Head-child);tmn=Head;Head=Head-next;free(tmn);/向普通链表中添加一个结点voidaddNode(PNode&Head,PNode&newNode)newNode-next=Head-next;Head-next=newNode;/向非递减排列的链表中添加一个结点voidaddAscNode(PNode&Head,PNode&newNode)PNodeP;PNodeQ;P=Head-next;Q=Head;while(P!=NULL&P-fvaluefvalue)Q=P;P=P-next
5、;/上面判断好位置之后,下面就是简单的插入了newNode-next=Q-next;Q-next=newNode;计算结点额h值intcomputeHValue(PNodetheNode)intnum=0;for(inti=0;i3;i+)for(intj=0;jdataij!=targetij)num+;returnnum;计算结点的f,g,h值voidcomputeAllValue(PNode&theNode,PNodeparentNode)if(parentNode=NULL)theNode-gvalue=0;elsetheNode-gvalue=parentNode-gvalue+1;
6、theNode-hvalue=computeHValue(theNode);theNode-fvalue=theNode-gvalue+theNode-hvalue;/初始化函数,进行算法初始条件的设置voidinitial()初始化open以及closed表initLink(open);initLink(closed);/初始化起始结点,令初始结点的父节点为空结点PNodeNULLNode=NULL;PNodeStart=(PNode)malloc(sizeof(NNode);for(inti=0;i3;i+)for(intj=0;jdataij=starttij;Start-parent=
7、NULL;Start-child=NULL;Start-next=NULL;computeAllValue(Start,NULLNode);起始结点进入open表addAscNode(open,Start);/将B节点的状态赋值给A结点voidstatusAEB(PNode&ANode,PNodeBNode)for(inti=0;i3;i+)for(intj=0;jdataij=BNode-dataij;/两个结点是否有相同的状态boolhasSameStatus(PNodeANode,PNodeBNode)for(inti=0;i3;i+)for(intj=0;jdataij!=BNode-
8、dataij)returnfalse;returntrue;/结点与其祖先结点是否有相同的状态boolhasAnceSameStatus(PNodeOrigiNode,PNodeAnceNode)while(AnceNode!=NULL)if(hasSameStatus(OrigiNode,AnceNode)returntrue;AnceNode=AnceNode-parent;returnfalse;/取得方格中空的格子的位置voidgetPosition(PNodetheNode,int&row,int&col)for(inti=0;i3;i+)for(intj=0;jdataij=0)r
9、ow=i;col=j;return;/交换两个数字的值voidchangeAB(int&A,int&B)intC;C=B;B=A;A=C;/检查相应的状态是否在某一个链表中boolinLink(PNodespciNode,PNodetheLink,PNode&theNodeLink,PNode&preNode)preNode=theLink;theLink=theLink-next;while(theLink!=NULL)if(hasSameStatus(spciNode,theLink)theNodeLink=theLink;returntrue;preNode=theLink;theLin
10、k=theLink-next;returnfalse;/产生结点的后继结点(与祖先状态不同)链表voidSpringLink(PNodetheNode,PNode&spring)introw;intcol;getPosition(theNode,row,col);/空的格子右边的格子向左移动if(col!=2)PNoderlNewNode=(PNode)malloc(sizeof(NNode);statusAEB(rlNewNode,theNode);changeAB(rlNewNode-datarowcol,rlNewNode-datarowcol+1);if(hasAnceSameStat
11、us(rlNewNode,theNode-parent)free(rlNewNode);/与父辈相同,丢弃本结点elserlNewNode-parent=theNode;rlNewNode-child=NULL;rlNewNode-next=NULL;computeAllValue(rlNewNode,theNode);/将本结点加入后继结点链表addNode(spring,rlNewNode);/空的格子左边的格子向右移动if(col!=0)PNodelrNewNode=(PNode)malloc(sizeof(NNode);statusAEB(lrNewNode,theNode);chan
12、geAB(lrNewNode-datarowcol,lrNewNode-datarowcol-1);if(hasAnceSameStatus(lrNewNode,theNode-parent)free(lrNewNode);/与父辈相同,丢弃本结点elselrNewNode-parent=theNode;lrNewNode-child=NULL;lrNewNode-next=NULL;computeAllValue(lrNewNode,theNode);/将本结点加入后继结点链表addNode(spring,lrNewNode);/空的格子上边的格子向下移动if(row!=0)PNodeudN
13、ewNode=(PNode)malloc(sizeof(NNode);statusAEB(udNewNode,theNode);changeAB(udNewNode-datarowcol,udNewNode-datarow-1col);if(hasAnceSameStatus(udNewNode,theNode-parent)free(udNewNode);/与父辈相同,丢弃本结点elseudNewNode-parent=theNode;udNewNode-child=NULL;udNewNode-next=NULL;computeAllValue(udNewNode,theNode);/将本
14、结点加入后继结点链表addNode(spring,udNewNode);/空的格子下边的格子向上移动if(row!=2)PNodeduNewNode=(PNode)malloc(sizeof(NNode);statusAEB(duNewNode,theNode);changeAB(duNewNode-datarowcol,duNewNode-datarow+1col);if(hasAnceSameStatus(duNewNode,theNode-parent)free(duNewNode);/与父辈相同,丢弃本结点elseduNewNode-parent=theNode;duNewNode-c
15、hild=NULL;duNewNode-next=NULL;computeAllValue(duNewNode,theNode);/将本结点加入后继结点链表addNode(spring,duNewNode);/输出给定结点的状态voidoutputStatus(PNodestat)for(inti=0;i3;i+)for(intj=0;j3;j+)coutdataij;coutgvalue;if(goal-parent!=NULL)outputBestRoad(goal-parent);cout第deepnum-层的状态:endl;outputStatus(goal);voidAStar()P
16、NodetmpNode;/指向从open表中拿出并放到closed表中的结点的指针PNodespring;/tmpNode的后继结点链PNodetmpLNode;/tmpNode的某一个后继结点PNodetmpChartNode;PNodethePreNode;/指向将要从closed表中移到open表中的结点的前一个结点的指针boolgetGoal=false;/标识是否达到目标状态longnumcount=1;/记录从open表中拿出结点的序号initial。;/对函数进行初始化initLink(spring);/对后继链表的初始化tmpChartNode=NULL;cout从open表中
17、拿出的结点的状态及相应的值endl;while(!isEmpty(open)从open表中拿出f值最小的元素,并将拿出的元素放入closed表中popNode(open,tmpNode);addNode(closed,tmpNode);cout第numcount+个状态是:endl;outputStatus(tmpNode);cout其f值为:fvalueendl;cout其g值为:gvalueendl;cout其h值为:hvaluegvaluegvalue)tmpChartNode-parent=tmpLNode-parent;tmpChartNode-gvalue=tmpLNode-gva
18、lue;tmpChartNode-fvalue=tmpLNode-fvalue;free(tmpLNode);状态在closed表中已经存在elseif(inLink(tmpLNode,closed,tmpChartNode,thePreNode)addSpringNode(tmpNode,tmpChartNode);if(tmpLNode-gvaluegvalue)PNodecommu;tmpChartNode-parent=tmpLNode-parent;tmpChartNode-gvalue=tmpLNode-gvalue;tmpChartNode-fvalue=tmpLNode-fvalue;freeSpringLink(tmpChartNode-child);tmpChartNode-child=NULL;popNode(thePreNode,commu);addAscNode(open
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 喷涂喷焊操作工安全生产规范模拟考核试卷含答案
- 露天矿物开采辅助工安全防护强化考核试卷含答案
- 罐头杀菌工安全技能模拟考核试卷含答案
- 公关员岗前技术基础考核试卷含答案
- 客服实习实训工作计划
- 车辆回购合同范本
- 施工员合同协议书
- 铁路物资合同范本
- 技能培训合同协议
- 采购代发合同协议
- 民族风格服装课件
- 水利工程前沿讲座
- (高清版)DB44∕T 1015-2012 《冻罗非鱼加工技术规范》
- 食品工艺学期末考试题库及答案
- 眼科加速康复外科理念临床应用与优化路径
- 竹利久一次性卫生筷项目投资可行性研究分析报告(2024-2030版)
- 7《大雁归来》课件
- 2025秋季学期国开电大本科《管理英语3》一平台机考真题及答案总题库珍藏版
- 教育培训课程开发及实施合作协议
- 硫磺销售安全管理制度
- 2.2更好发挥政府作用 2025学年高一政治示范课件(统编版必修2)
评论
0/150
提交评论