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

文档介绍
始状态的8数码(按每行从左往右依次输入,用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;}}2、程序运行结果截图截图1:初始态为:28314765运行结果如右图所示:专业专心专注专业资料参考首选截图2:初始状态为283时,程序运行结果如下:16475

收藏

分享

举报
下载此文档