西电电院人工智能课程大作业.pdf
《西电电院人工智能课程大作业.pdf》由会员分享,可在线阅读,更多相关《西电电院人工智能课程大作业.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、西电人工智能大作业西电人工智能大作业八数码难题八数码难题一一.实验目的实验目的八数码难题:在33的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。例如:2 28 83 31 14 41 12 23 38 84 47 76 65 57 76 65 5(a)初始状态 (b)目标状态图 1 八数码问题示意图请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或 任选一种启发式搜索方法(A 算法或 A*算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。本
2、实验选择宽度优先搜索:选择一个起点,以接近起始点的程度依次扩展节点,逐层搜索,再对下一层节点搜索之前,必先搜索完本层节点。二二.实验设备及软件环境实验设备及软件环境Microsoft Visual C+,(简称 Visual C+、MSVC、VC+或 VC)微软公司的 C+开发工具,具有集成开发环境,可提供编辑 C 语言,C+以及 C+/CLI等编程语言。三.实验方法实验方法算法描述:(1)将起始点放到OPEN表;(2)若OPEN空,无解,失败;否则继续;(3)把第一个点从OPEN移出,放到CLOSE表;(4)拓展节点,若无后继结点,转(2);(5)把n的所有后继结点放到OPEN末端,提供从后
3、继结点回到n的指针;(6)若n任意后继结点是目标节点,成功,输出;否则转(2)。流程图:代码:#include#include typedef struct Node int num9;/棋盘状态 int deepth;/派生的深度 g(n)int diffnum;/不在位的数目 h(n)int value;/耗散值 f(n)=g(n)+h(n)struct Node*pre;struct Node*next;struct Node*parent;numNode;/*-end of struct numNode-*/int origin9;/棋盘初始状态int target9;/棋盘目标状态i
4、nt numNode_num,total_step;numNode*open,*close;/Open 表和 Close 表numNode*create_numNode()return(numNode*)malloc(sizeof(numNode);numNode*open_getfirst(numNode*head);/返回第一项,并从 Open 表中删除void open_insert(numNode*head,numNode*item);/向 Open 表中按序插入新节点void close_append(numNode*head,numNode*item);/向 Close 表中插入新
5、节点int expand(numNode*item);/扩展节点int print_result(numNode*item);/打印结果numNode*copy_numNode(numNode*orgin);char isNewNode(numNode*open,numNode*close,int num9);/是 否 在 Open 表 或Close 表中void print_num(int num9);/打印棋盘状态int diff(int num9);/求不在位棋子的个数void init();/初始化,获得棋盘初始状态和目标状态void swap(int*a,int*b);int ope
6、rate(int num,int op);void free_list(numNode*head);/*Name:主函數 *Description:程序入口*/Int main(int argc,char*argv)/初始化 Open 表和 Close 表 open=create_numNode();close=create_numNode();open-pre=open-next=close-pre=close-next=NULL;init();/由用户输入初始和目标状态 /初始化初始节点 numNode*p1;p1=create_numNode();p1-parent=NULL;p1-de
7、epth=0;int i=0;for(i=0;inumi=origini;open_insert(open,p1);numNode_num=1;p1=open_getfirst(open);while(p1!=NULL)close_append(close,p1);if(expand(p1)return EXIT_SUCCESS;p1=open_getfirst(open);printf(No solution!n);return EXIT_SUCCESS;/*-end of function main-*/voidinit()while(1)printf(Please input oprig
8、inal status:nFor example:123456780stands forn 1 2 3n 4 5 6n 7 8 0n);char temp10;scanf(%s,&temp);int i=0;for(i=0;i=0&tempi-0=8;i+)origini=tempi-0;printf(Please input target status:n);scanf(%s,&temp);int j=0;for(j=0;j=0&tempj-0next;q=head;while(p!=NULL&item-value p-value)q=p;p=p-next;q-next=item;item-
9、pre=q;item-next=p;if(p!=NULL)p-pre=item;/*-end of function open_insert-*/numNode*open_getfirst(numNode*head)numNode*p;if(head-next=NULL)return NULL;p=head-next;head-next=p-next;if(p-next!=NULL)p-next-pre=head;p-pre=NULL;p-next=NULL;return p;/*-end of function open_getfirst-*/voidclose_append(numNode
10、*head,numNode*item)item-next=head-next;item-pre=head;head-next=item;if(item-next!=NULL)item-next-pre=item;/*-end of function close_append-*/intexpand(numNode*p1)numNode*p2;int op=1;for(op=1;opnum,op);if(isNewNode(open,close,p2-num)=N)p2-parent=p1;p2-deepth=p1-deepth+1;p2-diffnum=diff(p2-num);p2-valu
11、e=p2-deepth+p2-diffnum;if(p2-diffnum=0)total_step=print_result(p2);printf(Total step:%dn,total_step);free_list(open);free_list(close);return 1;else numNode_num+;open_insert(open,p2);else free(p2);return 0;/*-end of function expand-*/intoperate(int m,int op)int blank;blank=0;while(mblank!=0&blank2)sw
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西电电院 人工智能 课程 作业
限制150内