学生:021151**
时间:2023年12月4号。
一.启发式搜索解决八数码问题。
1. 实验目的。
问题描述:现有一个3*3的棋盘,其中有0-8一共9个数字,0表示空格,其他的数字可以和0交换位置(只能上下左右移动)。给定一个初始状态和一个目标状态,找出从初始状态到目标状态的最短路径的问题就称为八数码问题。
例如:实验问题为。
从初始状态。
要求编程解决这个问题,给出解决这个问题的搜索树以及从初始节点到目标节点的最短路径。
2. 实验设备及软件环境。
利用计算机编程软件visual c++ 6.0,用c语言编程解决该问题。
3. 实验方法。
1).算法描述:
把初始节点s放到open表中,计算,并把其值与节点s联系起来。
如果open表是个空表,则失败退出,无解。
从open表中选择一个值最小的节点。结果有几个节点合格,当其中有一个为目标节点时,则选择此目标节点,否则就选择其中任一节点作为节点。
把节点从open表中移出,并把它放入closed的扩展节点表中。
如果是目标节点,则成功退出,求得一个解。
扩展节点,生成其全部后继节点。对于的每一个后继节点:
.计算。.如果既不在open表中,也不在closed表中,则用估价函数把它添加入open表。从加一指向其父辈节点的指针,以便一旦找到目标节点时记住一个解答路径。
.如果已在open表或closed表上,则比较刚刚对计算过的值和前面计算过的该节点在表中的值。如果新的值较小,则。
.以此新值取代旧值。
.从指向,而不是指向它的父辈节点。
.如果节点在closed表中,则把它移回open表。
转向,即go to。
(2).流程图描述:
(3).程序源**:
#include <>
#include<>
struct node;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
if(number[i][j] !desnode[i][j])
w++;return w;
void printnode(node *a)
int i,j;
for(i=0; i<3; i++)
printf("
int checknode(node *open, node *close, int a[3][3])
//检验该节点状态是否出现过的子程序。
int checkflag=0;
int flag1,flag2;
node *p=open;
node *q=close;
while(p !=null)
if(flag1 ==9)
break;
elsep=p->next;
while(q !=null)
if(flag2 ==9)
break;
elseq=q->next;
if((flag1==9) |flag2==9))
checkflag=1;//如果出现过,置标志位为1
return checkflag;
struct node *findnextnode(node *prenode, node *open, node *close)
//扩展prenode指向的节点,并将扩展所得结点组成一条单链表
int i,j,m,n; /循环变量。
int temp; /临时替换变量。
int flag=0;
int a[3][3];/临时存放二维数组。
struct node *p, *q, *head;
head=(node *)malloc(sizeof(node));head指向该链表首结点,并且作为返回值。
p=head;
q=head;
head->next=null;//初始化。
for(i=0;i<3;i++)找到二维数组中0的位置。
/根据0的位置的不同,对a进行相应的变换。
for(m=0;m<3;m++)将prenode->number赋给a
for(n=0;n<3;n++)
a[m][n]=prenode->number[m][n];
if(i+1<=2)//情况1,0向下移。
for(m=0;m<3;m++)将prenode->number重新赋给a
for(n=0;n<3;n++)
a[m][n]=prenode->number[m][n];
if(i-1>=0)//情况2,0向上移。
for(m=0; m<3; m++)
for(n=0; n<3; n++)
a[m][n]=prenode->number[m][n];
if(j-1>=0)//情况3,0向左移。
for(m=0;m<3;m++)
for(n=0;n<3;n++)
人工智能大作业
目录。摘要2一 问题描述2 二 遗传算法特点介绍2 三 使用基本遗传算法解决0 1背包问题3 四 基本遗传算法解决0 1背包问题存在的不足4 五 改进的遗传算法解决0 1背包问题6 六 心得体会9 七 参考文献10 八 程序 10 摘要 研究了遗传算法解决0 1背包问题中的几个问题 1 对于过程中不...
人工智能大作业
摘要 随着新世纪的到来全国各地的宗族在大陆的分布较分散,近年来为了研究宗族现在的状况对宗族的情况进行了相关项的调查。其中以具体的家族关系调查为起始。本次课设就是做实现家族查询的系统。主要根据数据结构的原理应用树的制作进行家族查询。完成编写之后将运行出来的程序分行显示,本程序处理起来相对复杂一些但却涉...
人工智能大作业
内蒙古科技大学2012 2013 学年第一学期。人工智能 大作业。课程号 67111317 考试方式 大作业 任课教师 陈淋艳。使用专业 年级 班级 学号 姓名 一 15分 智能 智力 能力的含义是什么?什么是人工智能?人类研究人工智能的最终目标是什么?二 15分 传教士与野人问题 有三个传教士和三...