资源描述:
《人工智能及其应用_杨青锋、谭旭1》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、人工智能及其应用大作业学院电子工程学院专业智能科学与技术(021051班)姓名:杨青锋(02105019)、谭旭(02105032)指导老师:慕彩虹l八数码难题一、实验名称八数码难题的盲目搜索和启发式搜索二、实验目的1.熟悉人工智能系统中的问题求解过程;2.熟悉状态空间的盲目搜索和启发式搜索算法的应用;3.熟悉对八数码问题的建模、求解及编程语言的应用。三、实验设备及软件环境1.实验编程工具:VC++6.02.实验环境:Windows764位四、实验方法(一)盲目搜索:a)算法原理:1.将初始节点加入open表中.2.判断open表是否为空,若为空则搜索失败,否则,将ope
2、n表中的第一个元素加入close表并对其进行扩展。3.如果扩展出来的节点是目标节点,则搜索成功,程序退出,否则将扩展出来的节点添加入open表的队尾,返回第一步.a)程序流程图:b)程序源代码://盲目搜索源代码:#include#include#include#includetypedefstructnode{inti,degree,exp,father;inta[3][3];structnode*bef,*late,*son;}treenode;typedefstruct{treenode*
3、beg,*end;}quenode;inti=0,flag=0,count=0,num=0;voidposition(treenode*s,quenode*open,quenode*close,treenode*s1);voidextend(treenode*r1,treenode*s,treenode*s1,quenode*open,quenode*close);voidprintstr(treenode*open);intsearch(treenode*s1,treenode*s2);voidxuhao(treenode*s);voidinitquenode(quen
4、ode*&p);voidset(treenode*s);voidcpynode(treenode*s1,treenode*s2);voidadd(treenode*s,quenode*close);voidadjust1(treenode*close);inttest(treenode*s1,treenode*s2);voidinput(treenode*s);intcmpnode(treenode*s1,treenode*s2);voidprint(treenode*s);voidmain(){treenode*s0,*s1,*s;quenode*open,*close
5、;initquenode(open);initquenode(close);s0=(treenode*)malloc(sizeof(treenode));set(s0);s1=(treenode*)malloc(sizeof(treenode));set(s1);printf("请输入八数码(8+1=9位数)的初始状态,以空格分隔:");input(s0);printf("请输入八数码(8+1=9位数)的目标状态,以空格分隔:");input(s1);xuhao(s0);add(s0,open);while(open->beg->late!=NULL&&flag=
6、=0){s=(treenode*)malloc(sizeof(treenode));cpynode(s,open->beg->late);open->beg=open->beg->late;if(test(s,s1)==0){add(s,close);flag=1;}else{add(s,close);position(s,open,close,s1);};}if(open->beg->late!=NULL){printf("输出结果:");adjust1(close->beg);printstr(close->beg);printstr(open->beg);pri
7、ntf("%d步,%d个节点",num,count);}else{printf("查找错误!");};}voidinitquenode(quenode*&p){p=(quenode*)malloc(sizeof(quenode));p->beg=(treenode*)malloc(sizeof(treenode));p->beg->late=NULL;p->end=p->beg;}voidset(treenode*s){s->i=i;s->father=0;s->exp=0;s->degree=0;s->son=NUL