资源描述:
《人工智能导论八数码算法源程序代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include#include#include“八数码状态对应的节点结构体structNode{in(s[3][3];〃保莎/(教码欢态0代表空格int£搭“启发函数中的f和g值structNode*next;structNodeXpwWzsJI保存其父节点intopen_N=0;HiB^Open歹!]表中节点数目H八数码初始状态intinital_s[3][3]={2,1,3,&5,4,7,0,6};11八数码目标状态intfinals⑶[3]二{123,8,0,4,7,6,5};〃・II添加节点函
2、数入口,方法:通过插入排序向指定表添加〃・voidAdd_Node(structNode*head,structNode*p){structNode*q;if(head・>next)〃考虑讎表为空{q=head->next;if(p->fnext->f){〃考虑插入的节点值比链表的第一个节点值小p->next=head->next;head->next=p;else{while(q->next)/7^^^A节点x,形如a<=x<=b{if((q->ff
3、
4、q->f==p->f)&&(q->next->f>p->f
5、
6、q->next->
7、f==p->f)){p->next=q->next;q・>next=p;break;}q=q->next;}if(q->next=NULL)〃考虑插入的节点值比链表最后一个元素的值更大q・>next二p;}}elsehead・>next=p;}〃・□删除节点函数入口〃•voiddel_Node(structNode*head,structNode*p){structNode*q;q=head;while(q->next){if(q・〉next==p){q->next=p->next;p->next=NULL;if(q->next==NULL)return;
8、//free(p);}q=q->next;}}〃・"判断两个数组是否相等函数入口〃•intequal(intsl[3][3],ints2[3][3]){inti,j,flag=O;for(i=0;i<3;i++)fog二O;jv3;j++)if(sl[i][j]!=s2[i][j]){flag=1;break;}return1;elsereturn0;〃-〃.intexit_Node(structNode*head,ints[3][3],structNode*Old_Node){structNode*q=head->next;intflag=0;while
9、(q)if(equal(q->s,s)){flag=l;Old_Node->next=q;return1;}elseq=q->next;if(!flag)return0;}〃・〃计算p(n)的函数入口"其中pg)为放错位的数码与其正确的位置之间距离之和H具体方法:放错位的数码与其正确的位置对应下标差的绝对值之和〃■intwrong_sum(ints[3][3]){inti,j,fi,fj,sum=O;for(i=0;i<3;i++)for(j=0;j<3;j++){for(fi=0;fi<3;fi++)for(fj=0;fj<3;fj++)if((fina
10、l_s[fi][fj]==s[i]
11、j])){sum+=fabs(i・fi)+fabs(j-fj);break;}returnsum;〃・H获取后继结点函数入口□检查空格每种移动的合法性,如果合法则移动空格得到后继结点〃•Nodeintget_successor(structNode*BESTNODE,intdirection,struct法Succ巳帚扩展BESTNODE,产生其后继结点SUCCESSOR{inti,j,i_O,j_O,temp;for(i=0;i<3;i++)forG=0;j<3;j++)Successor->s[i][j]=BESTN
12、ODE->s[i][j];H获取空格所在位置for(i=0;i<3;i++)for(j=0;j<3;j++)if(BESTNODE->s[i][j]==0){i_0=i;j_0=j;break;}switch(direction){case0:if((i_0-l)>-l){temp=Successor->s[i_0][j_0];Successor->s[i_0][j_0]=Successor->s[i_0-1][j_0];Successor->s[i_0-1][j_0]=temp;return1;}elsereturn0;case1:if((j_O-1)>
13、-1){temp=Successor->s[i_0][j_0];S