趁着在学习人工智能,对于搜索算法以前也自学过,但缺乏实践,为自己定个小实践吧:以八数码难题这个简单的实例为例,系统回顾下搜索算法,包括广度优先搜索、深度优先搜索、代价树的广度和优先搜索,启发
式搜索中的A算法和A*算法,另外由于要用到链表,不妨把linux内核中常用的双链表拿来用吧。
知识准备:
西邮linux内核的双链表数据结构学习讲座:
http://www.xiyoulinux.cn/blog/?p=135
讲座ppt下载:
关于搜索:问题求解与搜索原理.pdf :
八数码问题:(摘自《人工智能原理及其应用》教材)
有一个3*3的方格棋盘,其中有0-8 9个数,0表示空格,
将节点tmp添加至Open表首部list_add(&(tmp-list),&(openTable));将节点tmp添加至Open表尾部
list_add_tail(&(tmp->list), &(openTable));
将节点tmp从Open表中取出放入Close表
list_move_tail(&(tmp->list), &(closeTable));
其中tmp->list均为在Linux内核源码list.h中定义的struct list_head类型的结构体,我们在状态节点struct state_node中包含该类型的成员list,即可实现对状态节点数据的双链表操作,具有很好的抽象性。附源码(VC工程下的控制台程序)、word算法描述:
| 文件: | 人工智能---段力SY0903202.rar | 大小: | 89KB | 下载: | 下载 |
|
阅读(2458) | 评论(0) | 转发(0) |