1 / 8
文档名称:

八数码问题实验报告.docx

格式:docx   大小:177KB   页数:8页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

八数码问题实验报告.docx

上传人:fangjinyan2017001 2022/2/21 文件大小:177 KB

下载得到文件列表

八数码问题实验报告.docx

文档介绍

文档介绍:精品文档
《八数码问题》实验报告
一、实验目的:
熟练掌握启发式搜索A冲算法。
、实验内容:
使用启发式搜索算法求解8数码问题。编制程序实现求解8数码问题A用算法,采用估
价函数
lwnfn=dn
pn
其中:d(n)umn_one];
begin[row_one][column_one]=temp;}
/*判断待调整的数码与最终数码相比正确位置数码的个数*/
intjudge(intbegin[num][num],intend[num][num])
{
intcount=0;//count记录数码中正确位置的个数
for(inti=0;i<num;i++)//检查当前图形的正确度
for(intj=0;j<num;j++){
if(begin[i][j]==end[i][j]&&end[i][j]!=0)count++;
}
returncount;//返回数码中正确位置的个数
}
/*将待调整数码从开始位置移动到终止位置,并将其过程输出*/intyidong(intbegin[num][num],intend[num][num]
存储上一轮移动的反方向代号
,intright,intjishu,intji_shu[50][3][3],intbiaoji,introw,intcolumn)//biaoji
精品文档
inttemp_zhi;
show(begin);//显示数组矩阵
if(jishu>=20)
return0;
intnode;//,node为标t己
inttemp;//存储当前待调整数码正确的个数
for(intq=0;q<jishu;q++)//检查交换后的end口口图形是否先前已经遍历过了
{
node=1;
for(intw=0;w<num&&node;w++)
for(intr=0;r<num&&node;r++)
if(ji_shu[q][w][r]!=begin[w][r])
node=0;
if(node==1)//如果先前遍历过,返回0
{
return0;
}
}
for(inti=0;i<num;i++)
for(intj=0;j<num;j++)
ji_shu[jishu][i][j]=begin[i][j];
if(right==num*num-1)//如果待调整数码与最终数码完全相同时,返回1
return1;
if(row>0&&biaoji!=0)//存储0的位置不是在第一行
{
exchange(begin,row-1,column,row,column);//将0与其上面的元素交换存储
位置
temp=judge(begin,end);
if(temp<right)//如果交换后正确数码的个数不大于原来正确数码的个数
exchange(begin,row-1,column,row,column);//再将其交换回来
elseif(temp>=right)//如果交换后正确数码的个数大于或等于原来正确数码
的个数
{
temp_zhi=yidong(begin,end,temp,jishu+1,ji_shu,2,row-1,column);
if(temp_zhi==1)//