资源描述:
《人工智能导论实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、院系:计算机科学学院专业:计算机科学与技术年级:2012级课程名称:人工智能学号:2012213567姓名:王亚戈指导教师:尹帆2014年6月24日年级 2012级班级 3班 学号2012213567专业计算机科学与技术 姓名 王亚戈实验名称八数码问题实验类型设计型综合型创新型实验目的或要求实验题目:实验原理(算法流程)#include#include#include#defineOverflow1#defineN3intgoal[N][N]={1
2、,2,3,8,0,4,7,6,5};intzero[2],NodeQTY=0;int*z=zero;//记录0的位置,zero[0]:r行;zero[1]:c列typedefintPiece;structChessboard{//棋盘信息Piecepos[N][N];//记录每个数码a的位置r行c列intd,f,move;//d:深度;f:启发函数值;move:父节点移动到该节点的方式};structLNode{Chessboardboard;LNode*parent,*next;boolflag;};t
3、ypedefLNode*List;int*Findzero(LNode*&Node){inti,j,zr[2];int*z=zr;for(i=0;iboard.pos[i][j]==0){zr[0]=i+1;zr[1]=j+1;break;}}}returnz;}intWrong(LNode*Node){intw=0,i,j;for(i=0;iboard.pos[i][j
4、]!=goal[i][j]&&Node->board.pos[i][j]!=0)w++;}}returnw;}intpick(LNode*Node){intw=0,i,j,ii,jj;for(i=0;iboard.pos[i][j]!=goal[i][j]&&Node->board.pos[i][j]!=0){for(ii=0;iiboard.pos[i][j]==g
5、oal[ii][jj]){w=w+abs(ii-i)+abs(jj-j);break;}}}}returnw;}LNode*extend(LNode*Node,intdepth,intzero[2],intmoveflag,intChoose){LNode*NewNode=newLNode;for(inti=0;iboard.pos[i][j]=Node->board.pos[i][j];}}switch(moveflag){cas
6、e1://向左移,不能出界:zero[1]>=2NewNode->board.pos[zero[0]-1][zero[1]-1]=NewNode->board.pos[zero[0]-1][zero[1]-2];NewNode->board.pos[zero[0]-1][zero[1]-2]=0;break;case2://向右移,不能出界:zero[1]<=2NewNode->board.pos[zero[0]-1][zero[1]-1]=NewNode->board.pos[zero[0]-1][ze
7、ro[1]];NewNode->board.pos[zero[0]-1][zero[1]]=0;break;case3://向上移,不能出界:zero[0]>=2NewNode->board.pos[zero[0]-1][zero[1]-1]=NewNode->board.pos[zero[0]-2][zero[1]-1];NewNode->board.pos[zero[0]-2][zero[1]-1]=0;break;case4://向下移,不能出界:zero[0]<=2NewNode->board.p
8、os[zero[0]-1][zero[1]-1]=NewNode->board.pos[zero[0]][zero[1]-1];NewNode->board.pos[zero[0]][zero[1]-1]=0;break;}NewNode->board.d=depth+1;switch(Choose){case1:NewNode->board.f=NewNode->board.d+Wrong(NewNode);break;ca