hx=9;s0.hx=hx(s0.a);?open=&s0;?p=&s0;?if(open->hx==0)?{ printf("该状态已为" /> hx=9;s0.hx=hx(s0.a);?open=&s0;?p=&s0;?if(open->hx==0)?{ printf("该状态已为" />

全文预览

启发式搜索算法解决八数码问题(C语言)

上传者:苏堤漫步 |  格式:doc  |  页数:9 |  大小:0KB

文档介绍
行从左往右依次输入,用0表示空格):\n");for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&s0.a[i][j]);s0.parent=(node*)malloc(sizeof(node));?s0.parent->hx=9;s0.hx=hx(s0.a);?open=&s0;?p=&s0;?if(open->hx==0)?{ printf("该状态已为最终状态!\n"); return;?}?q=&s0;?close=&s0;?open=NULL;?newlist=extend(q);//newlist指向新扩展出来的链表?open=insert(open,newlist);//将扩展出来的结点插入到open表中?while(1)?{ 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;printf("择优搜索过程如下:\n");?while(p!=NULL)?{ for(i=0;i<3;i++) { for(j=0;j<3;j++)printf("%d",p->a[i][j]); printf("\n"); } printf("\n"); p=p->next;?}}程序运行结果截图截图1:初始态为:28314765运行结果如右图所示:?截图2:初始状态为283时,程序运行结果如下:16475

收藏

分享

举报
下载此文档