- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
-九宫重排
实验二:九宫重排
一、实验目的
A*算法是人工智能领域最重要的启发式搜索算法之一,本实验通过九宫重排问题,强化学生对A*算法的理解与应用,为人工智能后续环节的课程奠定基础。
二、问题描述
给定九宫格的初始状态,要求在有限步的操作内,使其转化为目标状态,且所得到的解是代价最小解(即移动的步数最少)。如:
三、基本要求
输入:九宫格的初始状态和目标状态
输出:重排的过程,即途径的状态
实验结果
#include iostream.h
#include time.h
#include stdio.h
#include dos.h
#include conio.h
static int target[9]={1,2,3,8,0,4,7,6,5};
//class definition
class eight_num
{
private:
int num[9];
int not_in_position_num;
int deapth;
int eva_function;
public:
eight_num* parent;
eight_num* leaf_next;
eight_num* leaf_pre;
eight_num(int init_num[9]);
eight_num(int num1,int num2,int num3,int num4,int num5,int num6,int num7,int num8,int num9)
{
num[0]=num1;
num[1]=num2;
num[2]=num3;
num[3]=num4;
num[4]=num5;
num[5]=num6;
num[6]=num7;
num[7]=num8;
num[8]=num9;
}
eight_num(void)
{
for (int i=0;i9;i++)
num[i]=i;
}
void cul_para(void);
void get_numbers_to(int other_num[9]);
int get_nipn(void)
{return not_in_position_num;}
int get_deapth(void)
{return deapth;}
int get_evafun(void)
{return eva_function;}
void set_num(int other_num[9]);
void show(void);
eight_num operator=(eight_num);
eight_num operator=(int other_num[9]);
int operator==(eight_num);
int operator==(int other_num[9]);
};
//计算启发函数g(n)的值
void eight_num::cul_para(void)
{
int i;
int temp_nipn=0;
for (i=0;i9;i++)
if (num[i]!=target[i])
temp_nipn++;
not_in_position_num=temp_nipn;
if (this-parent==NULL)
deapth=0;
else
deapth=this-parent-deapth+1;
eva_function=not_in_position_num+deapth;
}
//构造函数1
eight_num::eight_num(int init_num[9])
{
for (int i=0;i9;i++)
num[i]=init_num[i];
}
//显示当前节点的状态
void eight_num::show()
{
coutnum[0];
cout ;
coutnum[1];
cout ;
coutnum[2];
cout\n;
coutnum[3];
cout ;
coutnum[4];
cout ;
coutnum[5];
cout\n;
coutnum[6];
cout ;
coutnum[7];
cout ;
coutnum[8];
cout\n;
}
//复制当前节点状态到一个另数组中
void eight_num::get_numbers_to(int other_num[9])
{
for (int i=0;i9;i++)
other_num[i]=num[i];
}
//设置当前节点状态(欲设置的状态记录的other数组中)
vo
文档评论(0)