八数码c语言代码_第1页
八数码c语言代码_第2页
八数码c语言代码_第3页
八数码c语言代码_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、八数码c语言代码#in clude<stdio.h>#in clude<stdlib.h> #in clude<memory.h> struct no deint x,y;int cn tdif;int step;int f9;int xy33; queue10000;int map 33;int dir42=-1,0,1,0,0,1,0,-1;int hash10000;int zz9;int f1,f2;struct node sour,dest;int judge( int a)/用逆序数判断是否可达int i,j,k=0;for(i=1;i<9

2、;i+)if(ai) for(j=0;j<i;j+) if(aj>ai) k+;return k;in t cou nt(i nt a,i nt b)/ 计算不一样的个数int i,j;for(i=j=0;i<9;i+)if(ai!=bi)j+;return j;int match(struct node m)判断是否和末状态匹配int i,j;for(i=0;i<9;i+)if(m.fi!=zzi)return 0; return 1;int comp(const void *p,const void *q) struct node *a=(struct node *

3、)p; struct node *b=(struct node *)q; if(a->c ntdif=b->c ntdif) return a->ste p-b->ste p;return a->c ntdif-b->cntdif;int visit(int x)/ 返回 hash 函数值 int i,c nt=1,sum=0; for(i=0;i<9;i+) sum+=xi*c nt+; return sum;void prin t(i nt f3)int i,j; for(i=0;i<3;i+) for(j=0;j<3;j+)prin

4、tf("%d ",fij); prin tf("n");prin tf("n");void bfs()/ 广搜int p, val,i,j,ff9,fli n=0;int head=0;int tail=0;memset(queue,0,sizeof(queue);queuehead=sour;queuehead.c ntdif=co un t(queuehead.f,zz);hashhead=visit(queuehead.f);print(queuehead.xy);/ 打印头结点while(head<=tail)struc

5、t node HH=queuehead+;int sx,sy;for(p=0;p<4;p+)flin=0;for(i=0;i<9;i+)/把头结点的值赋在此ffi=HH.fi;sx=HH.x+dir p0;sy=HH.y+dir p1;if(sx>=0&&sx<3&&sy>=0&&sy<3)ffsx*3+sy=0;ffHH.x*3+HH.y=HH.xysxsy;for(j=0;j<10000;j+)/判断是否是已经有过的状态,看hash表中是否已有 if(hashj=visit(ff)flin=1;bre

6、ak;if(fli n)con ti nue;tail+;for(i=0;i<3;i+)for(j=0;j<3;j+)queuetail.fi*3+j=queuetail.xyij=ffi*3+j;queuetail.ste p=H H.ste p+1;queuetail.x=sx;queuetail.y=sy;queuetail.c ntdif=co un t(queuetail.f,zz);hashtail=visit(queuetail.f);prin t(queuetail.xy);if(match(queuetail)printf(” 共需 %d 步! n”,queuet

7、ail.step);return;qsort(queue+head,tail-head+1,sizeof(queue0),comp);/ 排序,每次选择 cntdif 数目最 小的扩展int mai n()int i,j,a9,b9;printf("请输入初始状态:n"); for(i=0;i<3;i+)for(j=0;j<3;j+)scan f("%d",&map ij); sour.xyij=ma p ij; sour.fi*3+j=ma pij; ai*3+j=ma pij;if(ma pij=0)sour.x=i; sour.y=j; sour.ste p=0; sour.c ntdif=0;printf("请输入终止状态:n"); for(i=0;i<3;i+)for(j=0;j<3;j+)scan f("%d",&map dest.xyij=ma pij; dest.fi*3+j=ma p ij;bi*3+j=ma pij; zzi*3+j=ma pij;prin tf("n");if(judge (a)+judge(b)

温馨提示

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

评论

0/150

提交评论