欢迎来到天天文库
浏览记录
ID:5184537
大小:287.64 KB
页数:46页
时间:2017-12-05
《人工智能概论-搜索算法编程及实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、人工智能概论大作业学院:电子工程学院专业:智能科学与技术题目一:搜索算法编程及实验报告一.算法题目八数码难题的求解。二.实验目的从盲目搜索和启发式搜索方法中分别选择一种解决八数码难题,给出搜索树和从起始节点到目标节点的路径。三.实验设备及软件环境Win7的笔记本电脑,VS2013(使用c语言编程)。四.实验方法1.盲目搜索——宽度优先搜索。(1).算法描述如果搜索是以接近其实节点的程度来依次扩展节点,那么这中搜索就叫宽度优先搜索。这种搜索是逐层进行的,在对下一层的任一节点进行搜索之前,必须搜索完本层的所有节点。(1)把起始
2、节点放到OPEN表中(如果该起始节点为一目标节点,则求得一个解答)。(2)如果OPEN是个空表,则没有解,失败退出;否则继续。(3)把第一个节点(节点n)从OPEN表移出,并把它放入CLOSED扩展节点表中。(4)扩展节点n。如果没有后继节点,则转向上述第(2)步。(5)把n的所有后继节点放到OPEN表的末端,并提供从这些后继节点回到n的指针。(6)如果n的任一个后继节点是个目标节点,则找到一个解答,成功退出;否则转向第(2)步。(2).算法流程图45(3).程序代码#include"stdio.h"#include"co
3、nio.h"#include"string.h"structpic{chardata[10];charimoperate;intfather;charextend;};45charend[10]="12384765";intresult[100];intn;intm;picbase[100];char*w;intfind(intx){for(inti=0;i<10;i++)if(base[x].data[i]!=end[i])return0;return1;}voidshowline(intx){inti=0;while(
4、base[x].father!=-1){result[i]=x;x=base[x].father;i++;}result[i]=0;45result[i+1]=' ';m=i;printf("搜索路径");for(i=m;i>=0;i--){printf("");printf("%ct%ct%c",base[result[i]].data[0],base[result[i]].data[1],base[result[i]].data[2]);printf("%ct%ct%c",base[r
5、esult[i]].data[3],base[result[i]].data[4],base[result[i]].data[5]);printf("%ct%ct%c",base[result[i]].data[6],base[result[i]].data[7],base[result[i]].data[8]);}}intleft(intx){inti;for(i=0;i<10;i++)if(base[x].data[i]=='')break;if(i==0
6、
7、i==3
8、
9、i==6)return0;for(intj=
10、0;j<10;j++)base[n].data[j]=base[x].data[j];45base[n].data[i-1]=base[x].data[i];base[n].data[i]=base[x].data[i-1];base[n].father=x;base[n].imoperate='R';base[n].extend='Y';base[x].extend='N';w=base[n].data;n++;if(find(n-1)==1)return1;}intright(intx){inti;for(i=0;i<
11、10;i++)if(base[x].data[i]=='')break;if(i==2
12、
13、i==5
14、
15、i==8)return0;for(intj=0;j<10;j++)base[n].data[j]=base[x].data[j];base[n].data[i+1]=base[x].data[i];45base[n].data[i]=base[x].data[i+1];base[n].father=x;base[n].imoperate='L';base[n].extend='Y';base[x].extend='N';w
16、=base[n].data;n++;if(find(n-1)==1)return1;}intup(intx){inti;for(i=0;i<10;i++)if(base[x].data[i]=='')break;if(i==0
17、
18、i==1
19、
20、i==2)return0;for(intj=0;j<10;j+
此文档下载收益归作者所有