关于西电人工智能大作业.doc

关于西电人工智能大作业.doc

ID:58688651

大小:398.50 KB

页数:21页

时间:2020-10-09

关于西电人工智能大作业.doc_第1页
关于西电人工智能大作业.doc_第2页
关于西电人工智能大作业.doc_第3页
关于西电人工智能大作业.doc_第4页
关于西电人工智能大作业.doc_第5页
资源描述:

《关于西电人工智能大作业.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、人工智能大作业学生:021151**021151**时间:2013年12月4号一.启发式搜索解决八数码问题1.实验目的问题描述:现有一个3*3的棋盘,其中有0-8一共9个数字,0表示空格,其他的数字可以和0交换位置(只能上下左右移动)。给定一个初始状态和一个目标状态,找出从初始状态到目标状态的最短路径的问题就称为八数码问题。例如:实验问题为283104765123804765到目标状态:从初始状态:要求编程解决这个问题,给出解决这个问题的搜索树以及从初始节点到目标节点的最短路径。1.实验设备及软件环境利用计算机编程软件VisualC++6.0,用C语言编程解决该问题。2.实验方法(1).

2、算法描述:①.把初始节点S放到OPEN表中,计算,并把其值与节点S联系起来。②.如果OPEN表是个空表,则失败退出,无解。③.从OPEN表中选择一个值最小的节点。结果有几个节点合格,当其中有一个为目标节点时,则选择此目标节点,否则就选择其中任一节点作为节点。④.把节点从OPEN表中移出,并把它放入CLOSED的扩展节点表中。⑤.如果是目标节点,则成功退出,求得一个解。⑥.扩展节点,生成其全部后继节点。对于的每一个后继节点:a.计算。b.如果既不在OPEN表中,也不在CLOSED表中,则用估价函数把它添加入OPEN表。从加一指向其父辈节点的指针,以便一旦找到目标节点时记住一个解答路径。c.

3、如果已在OPEN表或CLOSED表上,则比较刚刚对计算过的值和前面计算过的该节点在表中的值。如果新的值较小,则I.以此新值取代旧值。II.从指向,而不是指向它的父辈节点。III.如果节点在CLOSED表中,则把它移回OPEN表。⑦转向②,即GOTO②。(2).流程图描述:(3).程序源代码:#include#includestructnode{intnumber[3][3];//用二维数组存放8数码intW;//W表示与目标状态相比错放的数码数intDepth;//记录当前节点的深度structnode*parent;//指向父节点的指针struct

4、node*next;//指向链表中下一个节点的指针};intCounterW(intNumber[3][3]){//函数说明:计算当前状态与目标状态的W值inti,j;intW=0;intDesnode[3][3]={1,2,3,8,0,4,7,6,5};for(i=0;i<3;i++)for(j=0;j<3;j++)if(Number[i][j]!=Desnode[i][j])W++;returnW;}voidPrintNode(node*A){inti,j;for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%d",A->number[i][j]);pr

5、intf("");}printf("");}intCheckNode(node*open,node*close,inta[3][3]){//检验该节点状态是否出现过的子程序intCheckFlag=0;intflag1,flag2;node*p=open;node*q=close;while(p!=NULL){flag1=0;for(inti=0;i<3;i++){for(intj=0;j<3;j++)if(a[i][j]==p->number[i][j])flag1++;}if(flag1==9)break;elsep=p->next;}while(q!=NULL){flag2

6、=0;for(inti=0;i<3;i++){for(intj=0;j<3;j++)if(a[i][j]==q->number[i][j])flag2++;}if(flag2==9)break;elseq=q->next;}if((flag1==9)

7、

8、(flag2==9))CheckFlag=1;//如果出现过,置标志位为1returnCheckFlag;}structnode*FindNextNode(node*Prenode,node*open,node*close){//扩展Prenode指向的节点,并将扩展所得结点组成一条单链表inti,j,m,n;//循环变量inttemp;

9、//临时替换变量intflag=0;inta[3][3];//临时存放二维数组structnode*p,*q,*head;head=(node*)malloc(sizeof(node));//head指向该链表首结点,并且作为返回值p=head;q=head;head->next=NULL;//初始化for(i=0;i<3;i++)//找到二维数组中0的位置{for(j=0;j<3;j++)if(Prenode->number[i]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。