下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、昆明理工大学信息工程与自动化学院学生实验报告( 201 201 学年 第 一 学期 ) 课程名称: 开课实验室: 年 月 日年级、专业、班 学号 姓名 成绩实验项目名称八数码难题指导教师 教师评语该同学是否了解实验原理:A.了解B.基本了解C.不了解该同学的实验能力:A.强 B.中等 C.差 该同学的实验是否达到要求:A.达到B.基本达到C.未达到实验报告是否规范:A.规范B.基本规范C.不规范实验过程是否详细记录:A.详细B.一般 C.没有 教师签名: 年 月 日一、实验内容八数码难题,问题描述:在33方格棋盘上,分别放置了标有数字1,2,3,4,5,6,7,8的八张牌,初始状态S0,目标状
2、态S1如图所示,可以使用的操作有:空格上移,空格左移,空格右移,空格下移。只允许位于空格左,上,右,下方的牌移入空格。用广度优先搜索策略寻找从初始状态到目标状态的解路径。 二、实验原理算法思想:这是一种盲目搜索算法。算法主要思想是从初始结点开始依次沿其上下左右四个方向扩展结点,并逐一检查这些后继结点是否为目标结点,若不等于目标结点则把该后继结点插入到数组末尾。然后取数组中未扩展的第一个结点重复以上操作,直到得到目标结点为止或在限定步数以内未得到解。广度优先搜索策略数据结构:void Bfs() queue Queue; Queue.push(org); HashTable org.myinde
3、x = -1; while( NOT Queue.empty() ) Map node = Queue.front(); Queue.pop( ); for(int k =0 ; k 4; k + ) Map tmp = node; tmp.position = node.position + derectionk; if(tmp.position 8 | ( k 1 & tmp.position / 3 != node.position /3 ) ) continue; tmp.myindex = HashValue( node , k ); if(0 != HashTabletmp.myi
4、ndex ) continue; tmp.detail node.position = tmp.detail tmp.position ; tmp.detail tmp.position = 0 ; HashTabletmp.myindex = node.myindex; / 状态记录到hashtable中 if( node.myindex = EndIndex ) return ; Queue.push( tmp ); return ; 三、所用仪器、材料1台PC及VISUAL C+6.0软件四、实验方法、步骤源代码见同一文件夹中bashuma.cpp部分程序代码:typedef struc
5、t Node int num9; int deepth; int diffnum; int value; struct Node * pre; struct Node * next; struct Node * parent;numNode; int main ( int argc, char *argv ) open=create_numNode(); close=create_numNode(); open-pre=open-next=close-pre=close-next=NULL; init(); /由用户输入初始和目标状态 numNode *p1; p1=create_numNod
6、e(); p1-parent=NULL; p1-deepth=0; int i=0; for ( i=0; inumi=origini; open_insert(open,p1); numNode_num=1; p1=open_getfirst(open); while (p1!=NULL) close_append(close,p1); if(expand(p1) return EXIT_SUCCESS; p1=open_getfirst(open); printf(No solution!n); return EXIT_SUCCESS; void init ( ) while(1) pri
7、ntf(输入初始状态S0(请从左到右依次输入每行数字,0代表空格):n); char temp10; scanf(%s,&temp); int i=0; for ( i=0;i=0 & tempi-0=8; i+) origini=tempi-0; printf(请输入目标状态S1:n); scanf(%s,&temp); int j=0; for ( j=0; j=0 & tempj-0=8; j+) targetj=tempj-0; system(cls); if ( i=9&j=9) break; int operate(int m, int op) int blank; blank=0
8、; while (mblank!=0 & blank2) swap(m+blank,m+blank-3); break; case 2: /* down */ if (blank6) swap(m+blank,m+blank+3); break; case 3: /* left */ if (blank!=0 & blank!=3 & blank!=6) swap(m+blank,m+blank-1); break; case 4: /* right */ if (blank!=2 & blank!=5 & blank!=8) swap(m+blank,m+blank+1); break; default : return 1; return 0;五、实验过程原始记录六、实验总结:人工智能这门课程综合了许多学科的知识,这些知识面十分广,以及它的应用也是十分广泛的,才刚开始学习的时候就会感觉有点复杂,因为它毕竟综合了一些我们还没有学过的知识。通过这次实验,我对八数码难题有了更进一步的认识,对广度优先搜索策略更加熟悉,广度优先搜索策略在有解的情形总能保证
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论