启发式搜索算法解决八数码问题

上传人:仙*** 文档编号:134078486 上传时间:2022-08-12 格式:DOC 页数:9 大小:79KB
收藏 版权申诉 举报 下载
启发式搜索算法解决八数码问题_第1页
第1页 / 共9页
启发式搜索算法解决八数码问题_第2页
第2页 / 共9页
启发式搜索算法解决八数码问题_第3页
第3页 / 共9页
资源描述:

《启发式搜索算法解决八数码问题》由会员分享,可在线阅读,更多相关《启发式搜索算法解决八数码问题(9页珍藏版)》请在装配图网上搜索。

1、1、程序源代码include #include struct nodeint a33;用二维数组存放8数码int hx;/函数h (x)的值,表示与目标状态的差距 struct node *parent;/指向父结点的指针 struct node *next;/指向链表中F个结点的指针 ;/hx 函数/int hx(int s33)/函数说明:计算S与目标状态的差距值int i, j;int hx=0;int sg3 3 = 1,2 3,8,0,4, 7, 6, 5;for(i=0;i3;i+)for(j=0;jnext=NULL; /初始化 for(i=0;i3;i+)/找到二维数组中0的位

2、宜for(j=0;jalij=0) flag=l; break;if(flag=l)break;for (m=0: ma 赋给 x for (n=0;namLn;根据0的位宜的不同,对X进行相应的变换情况1if(i-l=0)t=xij ;xi j二xi-1 j ;Xi-lj=t; flag=0;for (m=0; m3: m+) /将 x 赋给 afor(n=0;nparent-amLn) flag 卄;if(flag!=9)q=(node *)malloc(sizeof(node); for (m=0;m3;m-r+) /将 x 赋给 a for(n=0;namn二xm n; q-paren

3、t=ex; q-hx二hx(q-a); q-next=NULL; p-next=q; p=p-next;情况2for (m=0;ma 重新赋给 x,即还原 x for (n=0;namn;if(i+l=2)t二xi j ;xi j二xi+l j ;xi+l j二t; flagO;for(m=0;m3;m+)for (n=0;nparentamLn) flag 卄;if (flag!=9)q=(node *)malloc(sizeof(node); for (m=0;m3;m+) /将 x 賦给 a for (n=0;nam n=xm n; q-parent=ex; q-hx二hx(q-a);

4、q-next=NULL; p-next=q; p=p-next;情况3for (m=0;ma 重新赋给 x,即还原 x for (n=0;namn;if(j-l=0)t=xi j ;xi j二xi j-l ;Xi j-l=t; flag=0;for(m=0;m3;m+)for (n=0;nparentamn) flag 卄;if(flag!=9)q二(node *)malloc(sizeof(node); for (m=0;m3;m+)/将 x 赋给 a for(n=0;namn=xmn; q-parent=ex; q-hx二hx(q-a);q-next=NULL;p-next=q; p=p-

5、next;情况4for (m=0;ma 重新赋给 x,即还原 x for (n=0;namn;if(j+l=2)t=xi j ;xi j二xi j+1 ;xij+l=t;flag=0;for(m=0;m3;m+)for (n=0;nparent-amn)flag 卄;if (flag!=9)q=(node *)malloc(sizeof(node); for (m=0;m3;m-r+)for (n=0;namn二xmn;q-parent=ex;q-hx二hx(q-a); q-next=NULL; p-next=q; p=p-next;head=head-next;return head;/ex

6、tend 函数 end/insert 函数/node* insert(node *open, node * head) /函数说明:将head链表的结点依次插入到。pm链表相应的位置,/使open表中的结点按从小到大排序。函数返回open指针node *q;/p、q均指向open表中的结点,p指向q所指的前一个结点int i, j;int flag=0;辻(open二二NULL)/初始状态,open表为空 /首先将head表第一个结点直接放入open表中 open=head;q=head;head二head-next;q-next=NULL;再插入第二个结点if (head-hxhx)/插入到

7、首结点位置open=head;head=head-next;open-next=q;else或者第二个结点的位置q-next=head;head=head-next;q=q-next;q-next=NULL;p=open;p二open;q=open-next; /end ifwh 订e(head!=NULL)q=open;if (head-hxhx) /插入到表头open=head;head=head-next;open-next=q;continue;else q=q-next;p=open; /否则,q指像第二个结点,p指向q前一个结点while (q-next! =NULL) /将hea

8、d的一个结点插入到链表中(非表尾的位置) if(q-hxhx)q二q_next; p=p-next;elsep-next=head; head=head-next; p-next-next=q; break; if (q-next=NULL)/将head的一个结点插入到表尾if(q-hxhead-hx)p-next=head;head=head-next;p-next-next=q;elseq-next=head;head=head-next;q-next-next=NULL;/if/wh 订 ereturn open;/insert/insert 函数 end/OHMWMMvoid main

9、Oint i, j;node sO;node *open, *close;node *p,*q;node *newlist;printfC请输入初始状态的8数码(按每行从左往右依次输入,用0表示空格):); for(i=0;i3;i +)for(j=0;jhx二9;=hx;open二&s0;p=&sO;if (open-hx=0)printf (该状态已为最终状态! n);return;q=&sO;close二&s0;open二NULL;newlist=extend(q) ;/newlist指向新扩展出来的链表open=insert (open, newlist);/将扩展岀来的结点插入到op

10、en表中wh 订 e(l)q-next=open;/q始终指向close表尾结点。将open表的第一个元素加到close 表open=open-next;q=q-next;q-next=NULL;if (q-hx=0)printf (n 搜索成功! n);break;newlist=extend(q) ;/对close表最后一个结点进行扩展,扩展得到的链表接到 open表尾open=insert (open, newlist) ;/将扩展的结点按顺序插入到open表中p=close;printfC择优搜索过程如下:n); while(p!=NULL)for(i=0;i3;i+)for(j=0;

11、jai j); printf(n);printf(*n*);p=p-next;2程序运行结果截图截图1: r 初始态 217为345运行结果 右图所示10请输入初始状态的&数码(按每行从左往右依次输入)2S48342171072860176217撰索成功!:怪优捜索过程如下匕s0Press any key to continue截图2:初始状态为2178 3时,程序运行结果如下:6 45 D:M S Dev98Bin Debu gV 黴码赵贰请输入初始状态的8数码(按每行从左往右依次输入用表示空格厂28314705诒籠蠶第B程如下;8 36 40 50 2 318 4? 6 5Press any kwy to continue

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!