西电人工智能大作业

发布 2022-09-15 05:45:28 阅读 5743

学生: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分 传教士与野人问题 有三个传教士和三...