- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
人工智能实验报告
学院 专业 班级 学号 姓名 成绩 实验名称 八数码问题 指导老师
一、问题描述:
在3×3的棋盘上,摆着8个将牌,每个将牌都刻有1~8数码中的某个数码。棋盘中留有一个空格,允许其周围的某个将牌向空格移动,这样通过移动将牌就可以不断改变棋牌的布局。
请用计算机实现算法解决八数码问题:提供输入初始将牌布局和目标将牌布局的功能,在接收输入之后,输出移动的步骤(方式)。
二、算法设计:
三、算法实现:
#includeiostream
using namespace std;
struct Node
{
int data[4][4];
int g,h,f,r,c,last,from;
//blank location(r,c),last point to the parent node,from point out the blanks coming //direction
};
Node list[100000];//open and closed
//Node end;//the target node
void calculateF(Node node,Node target)
{//calculate the f value
node.h=0;
for(int i=1;i4;i++)
{
for(int j=1;j4;j++)
{
if(i==target.rj==target.c)
{
continue;
}
if(node.data[i][j]!=target.data[i][j])
{
node.h++;
}
}
}
node.h=0;//calculate the h value above,delete this sentence if use the A* algorithm
node.f=node.g+node.h;
}
bool isTarget(Node node,Node target)
{//decide whether node is the answer
for(int i=1;i4;i++)
{
for(int j=1;j4;j++)
{
if(node.data[i][j]!=target.data[i][j])
{
return false;
}
}
}
return true;
}
void swap(Node node1,Node node2)
{//node1s value in exchange with node2s value
int temp=node1.c;
node1.c=node2.c;
node2.c=temp;
temp=node1.f;
node1.f=node2.f;
node2.f=temp;
temp=node1.g;
node1.g=node2.g;
node2.g=temp;
temp=node1.h;
node1.f=node2.h;
node2.h=temp;
temp=node1.r;
node1.r=node2.r;
node2.r=temp;
temp=node1.last;
node1.last=node2.last;
node2.last=temp;
for(int i=1;i4;i++)
{
for(int j=1;j4;j++)
{
temp=node1.data[i][j];
node1.data[i][j]=node2.data[i][j];
node2.data[i][j]=temp;
}
}
return;
}
void sort(int start,int end)
{//sort from the index value of start to the end,note that index end is invalid.
int times=0;;
bool flag=true;
while(flag)
{
times++;
flag=false;
for(int i=start;iend-times;i++)
{
if(list[i].flist[i+1].f)
{
swap(list[i],list[i+1]);
flag=true;
}
}
}
return;
}
void print(Node node)
{//print the reverse path
while(1)
{
您可能关注的文档
- 云南省丽江市永胜县永北镇中学中考英语复习 形容词与副词的比较等级课件 人教新目标.ppt
- 云南省丽江市永胜县永北镇中学中考英语复习 复习策略课件 人教新目标.ppt
- 云南省丽江市永胜县永北镇中学中考英语复习 句子的种类课件 人教新目标.ppt
- 云南省丽江市永胜县永北镇中学中考英语复习 形容词比较级课件 人教新目标.ppt
- 云南省丽江市永胜县永北镇中学七年级英语上册 Unit 4 Topic 3 Section A课件 人教新目标版.ppt
- 云南省丽江市永胜县永北镇中学七年级英语上册 Unit 4 Topic 3 Section C课件 人教新目标版.ppt
- 云南省丽江市永胜县永北镇中学七年级英语上册 Unit 4 Topic 1 Section D课件 人教新目标版.ppt
- 云南省丽江市永胜县永北镇中学中考英语复习 词汇课件 人教新目标.ppt
- 云南省丽江市永胜县永北镇中学中考英语复习 连词课件 人教新目标.ppt
- 云南省丽江市永胜县永北镇中学初中英语 介词的用法专项讲解与练.doc
文档评论(0)