人工智能实验报告八数码难题Word格式文档下载.doc

上传人:b****1 文档编号:13163977 上传时间:2022-10-07 格式:DOC 页数:5 大小:86.50KB
下载 相关 举报
人工智能实验报告八数码难题Word格式文档下载.doc_第1页
第1页 / 共5页
人工智能实验报告八数码难题Word格式文档下载.doc_第2页
第2页 / 共5页
人工智能实验报告八数码难题Word格式文档下载.doc_第3页
第3页 / 共5页
人工智能实验报告八数码难题Word格式文档下载.doc_第4页
第4页 / 共5页
人工智能实验报告八数码难题Word格式文档下载.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

人工智能实验报告八数码难题Word格式文档下载.doc

《人工智能实验报告八数码难题Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《人工智能实验报告八数码难题Word格式文档下载.doc(5页珍藏版)》请在冰豆网上搜索。

人工智能实验报告八数码难题Word格式文档下载.doc

A.详细□ B.一般□ C.没有□

教师签名:

年月日

一、实验内容

八数码难题,问题描述:

在3×

3方格棋盘上,分别放置了标有数字1,2,3,4,5,6,7,8的

八张牌,初始状态S0,目标状态S1如图所示,可以使用的操作有:

空格上移,空格左移,

空格右移,空格下移。

只允许位于空格左,上,右,下方的牌移入空格。

用广度优先搜索

策略寻找从初始状态到目标状态的解路径。

二、实验原理

算法思想:

这是一种盲目搜索算法。

算法主要思想是从初始结点开始依次沿其上下左右四个方向扩展

结点,并逐一检查这些后继结点是否为目标结点,若不等于目标结点则把该后继结点插入到

数组末尾。

然后取数组中未扩展的第一个结点重复以上操作,直到得到目标结点为止或在限

定步数以内未得到解。

广度优先搜索策略数据结构:

voidBfs()

{

queue<

Map>

Queue;

Queue.push(org);

HashTable[org.myindex]=-1;

while(NOTQueue.empty())

{

Mapnode=Queue.front();

Queue.pop();

for(intk=0;

k<

4;

k++)

{

Maptmp=node;

tmp.position=node.position+derection[k];

if(tmp.position<

0||tmp.position>

8||(k>

1&

&

tmp.position/3!

=node.position/3))

continue;

tmp.myindex=HashValue(node,k);

if(0!

=HashTable[tmp.myindex])continue;

tmp.detail[node.position]=tmp.detail[tmp.position];

tmp.detail[tmp.position]=0;

HashTable[tmp.myindex]=node.myindex;

//状态记录到hashtable中

if(node.myindex==EndIndex)return;

Queue.push(tmp);

}

}

return;

}

三、所用仪器、材料

1台PC及VISUALC++6.0软件

四、实验方法、步骤

源代码见同一文件夹中bashuma.cpp

部分程序代码:

typedefstructNode{

intnum[9];

intdeepth;

intdiffnum;

intvalue;

structNode*pre;

structNode*next;

structNode*parent;

}numNode;

intmain(intargc,char*argv[])

{

open=create_numNode();

close=create_numNode();

open->

pre=open->

next=close->

pre=close->

next=NULL;

init();

//由用户输入初始和目标状态

numNode*p1;

p1=create_numNode();

p1->

parent=NULL;

deepth=0;

inti=0;

for(i=0;

i<

9;

i++)

{

p1->

num[i]=origin[i];

}

open_insert(open,p1);

numNode_num=1;

p1=open_getfirst(open);

while(p1!

=NULL)

{

close_append(close,p1);

if(expand(p1))

returnEXIT_SUCCESS;

p1=open_getfirst(open);

printf("

Nosolution!

\n"

);

returnEXIT_SUCCESS;

}

voidinit()

while

(1)

printf("

输入初始状态S0(请从左到右依次输入每行数字,0代表空格):

chartemp[10];

scanf("

%s"

&

temp);

inti=0;

for(i=0;

i<

9&

temp[i]-'

0'

>

=0&

<

=8;

{

origin[i]=temp[i]-'

;

}

请输入目标状态S1:

intj=0;

for(j=0;

j<

temp[j]-'

j++)

{

target[j]=temp[j]-'

system("

cls"

if(i==9&

j==9)

{

break;

}

intoperate(intm[],intop)

intblank;

blank=0;

while(m[blank]!

blank<

9)

++blank;

if(blank==9)

return1;

switch(op){

case1:

/*up*/

if(blank>

2)

swap(m+blank,m+blank-3);

case2:

/*down*/

if(blank<

6)

swap(m+blank,m+blank+3);

case3:

/*left*/

if(blank!

blank!

=3&

=6)

swap(m+blank,m+blank-1);

case4:

/*right*/

=2&

=5&

=8)

swap(m+blank,m+blank+1);

default:

return1;

return0;

}

五、实验过程原始记录

六、实验总结:

人工智能这门课程综合了许多学科的知识,这些知识面十分广,以及它

的应用也是十分广泛的,才刚开始学习的时候就会感觉有点复杂,因为它毕竟

综合了一些我们还没有学过的知识。

通过这次实验,我对八数码难题有了更进

一步的认识,对广度优先搜索策略更加熟悉,广度优先搜索策略在有解的情形

总能保证搜索到最短路经,也就是移动最少步数的路径。

在进行广度优先搜索

时候,将父结点所在的数组索引记录在子结点中了,所以得到目标排列的时

候,我们只要从子结点逆向搜索就可以得到最优搜索路径了。

这次实验还让我对人工智能的应用有了更全面的认识,让我对今后的学习

有了一个更加明确的目标。

-5-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1