C语言解八数码问题之人工智能实验报告文档格式.docx
- 文档编号:17196485
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:11
- 大小:41.73KB
C语言解八数码问题之人工智能实验报告文档格式.docx
《C语言解八数码问题之人工智能实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《C语言解八数码问题之人工智能实验报告文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
4
1
3
7
8
6
(a)初始状态(b)目标状态
图1八数码问题示意图
请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或任选一种启发式搜索方法(A算法或A*算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。
2.实验步骤
(1)分析算法基本原理和基本流程;
程序采用宽度优先搜索算法,基本流程如下:
(2)确定对问题描述的基本数据结构,如Open表和Closed表等;
OPEN
CLOSED
S
A,B,C
B,C,D,E,F
S,A
C,D,E,F,G
S,A,B
D,E,F,G,H
S,A,B,C
E,F,G,H,I,J
S,A,B,C,D
F,G,H,I,JK,L
S,A,B,C,D,E
G,H,I,JK,L,M,N
S,A,B,C,D,E,F
H,I,JK,L,M,N,O,P
S,A,B,C,D,E,F,G
(3)编写算符运算、目标比较等函数;
(4)编写输入、输出接口;
(5)全部模块联调;
(6)撰写实验报告。
(五)实验报告要求
所撰写的实验报告必须包含以下内容:
1.算法基本原理和流程框图;
2.基本数据结构分析和实现;
3.编写程序的各个子模块,按模块编写文档,含每个模块的建立时间、功能、输入输出参数意义和与其它模块联系等;
4.程序运行结果,含使用的搜索算法及搜索路径等;
5.实验结果分析;
6.结论;
7.提供全部源程序及软件的可执行程序。
附:
实验报告格式
一、实验问题
二、实验目的
三、实验原理
四、程序框图
五、实验结果及分析
六、结论
七、源程序及注释
#include<
stdio.h>
conio.h>
intn,m;
typedefstructNode
{
charmatrix[10];
/*存储矩阵*/
charoperate;
/*存储不可以进行的操作,L代表不能左移R代表不能右移U代表不能上移D代表不能下移*/
charextend;
/*是否可以扩展,Y代表可以,N代表不可以*/
intfather;
/*指向产生自身的父结点*/
}Node;
charstart[10]={"
83426517"
};
/*此处没有必要初始化*/
charend[10]={"
12384765"
Nodebase[4000];
intresult[100];
/*存放结果的base数组下标号,逆序存放*/
intmatch()/*判断是否为目标*/
inti;
for(i=0;
i<
9;
i++)
if(base[n-1].matrix[i]!
=end[i])
{
return0;
}
}
return1;
voidshow()/*显示矩阵的内容*/
inti=1;
while(m>
=0)
intmm=result[m];
//clrscr();
printf("
\n\n\n状态方格\t\t步骤%d"
i);
\n\n\n\n\n\t\t\t%c\t%c\t%c\n"
base[mm].matrix[0],base[mm].matrix[1],base[mm].matrix[2]);
\n\n\t\t\t%c\t%c\t%c\n"
base[mm].matrix[3],base[mm].matrix[4],base[mm].matrix[5]);
base[mm].matrix[6],base[mm].matrix[7],base[mm].matrix[8]);
//sleep
(1);
m--;
i++;
voidleave()/*推理成功后退出程序之前要执行的函数,主要作用是输出结果*/
n--;
while(base[n].father!
=-1)
result[m]=n;
m++;
n=base[n].father;
result[m]=0;
result[m+1]='
\0'
;
show();
//clrscr();
printf("
\n\n\n\n\n\n\n\n\n\t\t\t\t搜索结束\n\n\n\n\n\n\n\n\n\n"
);
getch();
//exit(0);
intleft(intx)/*把下标为X的数组中的矩阵的空格左移*/
inti,j;
charch;
if(base[x].matrix[i]=='
'
)
break;
if(i==0||i==3||i==6||i==9)
for(j=0;
j<
j++)
base[n].matrix[j]=base[x].matrix[j];
ch=base[n].matrix[i-1];
base[n].matrix[i-1]=base[n].matrix[i];
base[n].matrix[i]=ch;
base[n].operate='
R'
base[n].extend='
Y'
base[n].father=x;
base[x].extend='
N'
n++;
if(match(i))
leave();
intright(intx)/*把下标为X的数组中的矩阵的空格右移*/
if(i==2||i==5||i==8||i==9)
ch=base[n].matrix[i+1];
base[n].matrix[i+1]=base[n].matrix[i];
L'
if(match(i))
intup(intx)/*把下标为X的数组中的矩阵的空格上移*/
if(i==0||i==1||i==2||i==9)
ch=base[n].matrix[i-3];
base[n].matrix[i-3]=base[n].matrix[i];
D'
intdown(intx)/*把下标为X的数组中的矩阵的空格下移*/
if(i==6||i==7||i==8||i==9)
ch=base[n].matrix[i+3];
base[n].matrix[i+3]=base[n].matrix[i];
U'
main()
chara[20],b[20];
n=1;
//textcolor(LIGHTGREEN);
/*以下是输入初始和目标矩阵,并把输入的0转换为空格*/
Pleaseinputthestart9chars:
"
scanf("
%s"
a);
Pleaseinputtheend9chars:
b);
if(a[i]=='
0'
start[i]='
continue;
if(b[i]=='
end[i]='
start[i]=a[i];
end[i]=b[i];
start[9]='
end[9]='
base[0].matrix[i]=start[i];
base[0].operate='
base[0].extend='
base[0].father=-1;
/*以上是为第一个base数组元素赋值*/
n<
4000;
if(base[i].extend=='
if(base[i].operate=='
right(i);
up(i);
down(i);
left(i);
right(i);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数码 问题 人工智能 实验 报告