深度宽度优先搜索---八数码
更新时间:2023-04-27 17:52:01 阅读量: 实用文档 文档下载
.
. 八数码问题
具体思路:
宽度优先算法实现过程
(1)把起始节点放到OPEN 表中;
(2)如果OPEN 是个空表,则没有解,失败退出;否则继续;
(3)把第一个节点从OPEN 表中移除,并把它放入CLOSED 的扩展节点表中;
(4)扩展节点n 。如果没有后继节点,则转向(2)
(5)把n 的所有后继结点放到OPEN 表末端,并提供从这些后继结点回到n 的指针;
(6)如果n 的任意一个后继结点是目标节点,则找到一个解答,成功退出,否则转向(2)。
Y
.
深度优先实现过程
(1)把起始节点S放入未扩展节点OPEN表中。如果此节点为一目标节点,则得到一个解;(2)如果OPEN为一空表,则失败退出;
(3)把第一个节点从OPEN表移到CLOSED表;
(4)如果节点n的深度等于最大深度,则转向(2);
(5)扩展节点n,产生其全部后裔,并把它们放入OPEN表的前头。如果没有后裔,则转向(2);
(6)如果后继结点中有任一个目标节点,则得到一个解,成功退出,否则转向(2)。
.
方法一:用C语言实现
#include
#include
#include
typedef long UINT64;
typedef struct
{
char x; //位置x和位置y上的数字换位
char y; //其中x是0所在的位置
} EP_MOVE;
#define SIZE 3 //8数码问题,理论上本程序也可解决15数码问题,
#define NUM SIZE * SIZE //但move_gen需要做很多修改,输入初始和结束状态的部分和check_input也要修改
#define MAX_NODE 1000000
#define MAX_DEP 100
#define XCHG(a, b) { a=a + b; b=a - b; a=a - b; }
#define TRANS(a, b)
/*{ long iii; (b)=0; for(iii=0; iii < NUM; iii++) (b)=((b) << 4) + a[iii]; }*/ //将数组a转换为一个64位的整数b
#define RTRANS(a, b) \
{ \
long iii; \
.
.
UINT64 ttt=(a); \
for(iii=NUM - 1; iii >= 0; iii--) \
{ \
b[iii]=ttt & 0xf; \
ttt>>=4; \
} \
} //将一个64位整数a转换为数组b
//
typedef struct EP_NODE_Tag
{ UINT64 v; //保存状态,每个数字占4个二进制位,可解决16数码问题struct EP_NODE_Tag *prev; //父节点
struct EP_NODE_Tag *small, *big;
} EP_NODE;
EP_NODE m_ar[MAX_NODE];
EP_NODE *m_root;
long m_depth; //搜索深度
EP_NODE m_out[MAX_DEP]; //输出路径
//
long move_gen(EP_NODE *node, EP_MOVE *move)
{long pz; //0的位置
UINT64 t=0xf;
for(pz=NUM - 1; pz >= 0; pz--)
.
. {if((node->v & t) == 0)
{ break; //找到0的位置
}
t<<=4;
}
switch(pz)
{case 0:
move[0].x=0;
move[0].y=1;
move[1].x=0;
move[1].y=3;
return 2;
case 1:
move[0].x=1;
move[0].y=0;
move[1].x=1;
move[1].y=2;
move[2].x=1;
move[2].y=4;
return 3;
case 2:
move[0].x=2;
.
. move[0].y=1;
move[1].x=2;
move[1].y=5;
return 2;
case 3:
move[0].x=3;
move[0].y=0;
move[1].x=3;
move[1].y=6;
move[2].x=3;
move[2].y=4;
return 3;
case 4:
move[0].x=4;
move[0].y=1;
move[1].x=4;
move[1].y=3;
move[2].x=4;
move[2].y=5;
move[3].x=4;
move[3].y=7;
return 4;
.
. case 5:
move[0].x=5;
move[0].y=2;
move[1].x=5;
move[1].y=4;
move[2].x=5;
move[2].y=8;
return 3;
case 6:
move[0].x=6;
move[0].y=3;
move[1].x=6;
move[1].y=7;
return 2;
case 7:
move[0].x=7;
move[0].y=6;
move[1].x=7;
move[1].y=4;
move[2].x=7;
move[2].y=8;
return 3;
.
.
case 8:
move[0].x=8;
move[0].y=5;
move[1].x=8;
move[1].y=7;
return 2;
}
return 0;
}
long mov(EP_NODE *n1, EP_MOVE *mv, EP_NODE *n2) //走一步,返回走一步后的结果
{
char ss[NUM];
RTRANS(n1->v, ss);
XCHG(ss[mv->x], ss[mv->y]);
TRANS(ss, n2->v);
return 0;
}
long add_node(EP_NODE *node, long r)
{
EP_NODE *p=m_root;
EP_NODE *q;
.
. while(p)
{ q=p;
if(p->v == node->v) return 0;
else if(node->v > p->v) p=p->big;
else if(node->v < p->v) p=p->small;
}
m_ar[r].v=node->v;
m_ar[r].prev=node->prev;
m_ar[r].small=NULL;
m_ar[r].big=NULL;
if(node->v > q->v)
{ q->big= &m_ar[r];
}
else if(node->v < q->v)
{ q->small= &m_ar[r];
}
return 1;
}
/*得到节点所在深度*/
long get_node_depth(EP_NODE *node) { long d=0;
while(node->prev)
.
.
{ d++;
node=node->prev;
}
return d;
}
/*返回值:成功-返回搜索节点数,节点数不够-(-1),无解-(-2)*/ long bfs_search(char *begin, char *end)
{ long h=0, r=1, c, i, j;
EP_NODE l_end, node, *pnode;
EP_MOVE mv[4]; //每个局面最多4种走法
TRANS(begin, m_ar[0].v);
TRANS(end, l_end.v);
m_ar[0].prev=NULL;
m_root=m_ar;
m_root->small=NULL;
m_root->big=NULL;
while((h < r) && (r < MAX_NODE - 4))
{ c=move_gen(&m_ar[h], mv);
for(i=0; i < c; i++)
{ mov(&m_ar[h], &mv[i], &node);
node.prev= &m_ar[h];
if(node.v == l_end.v)
.
正在阅读:
深度宽度优先搜索---八数码04-27
肇庆市城市绿地系统规划(2010-2020)招标文件 - 图文09-21
高考必背7000个单词浓缩于100句最新版译林牛津高中复习一轮复习03-08
中国丝绒披肩行业市场前景分析预测年度报告(目录) - 图文05-15
2019高中物理第四章机械能和能源第5节机械能守恒定律1机械能守恒定律的内容及表达式同步练习212-05
借鉴外国行政管理有益经验的思考07-18
徐长青的简约教学法11-09
兰州大学《中国文学史》历年考研真题汇总08-14
2015年初级会计职称考试《经济法基础》考点资料每日一练(5月7日)06-02
2014年上期上洞完小三年级数学教学计划03-21
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 宽度
- 深度
- 优先
- 数码
- 搜索
- 如何打造手机网站以满足用户体验?
- 福建省厦门一中集美分校高三(季高考)期中考试数学 Word版缺答案
- 【2018最新】散文优美句子摘抄-优秀word范文 (5页)
- 【最新推荐】广联达计价培训会议通讯稿-实用word文档 (4页)
- 2020学年高中化学单元质量检测三含解析新人教版选修5
- 【化学】0809上学期化学期末试卷
- 北京市大兴区2019年八年级上学期英语期末质量跟踪监视试题(模拟卷四)
- 2019年中国抗高血压药物市场评估及未来发展趋势报告(定制版)目录
- 内蒙古锦山蒙古族中学2019-2020学年高二上学期期末考试地理试题
- 山西省普通小学乡村在校学生数量情况3年数据专题报告2019版
- 江西省2015年下半年主治医师(儿科)入职试题
- 人教统编版高中历史必修二 影响世界的工业革命示范教案
- 工程师职称工作总结4篇
- (目录)2017-2022年中国胆、肝疾病治疗药物行业市场预测与投资战略规划分析报告-行业趋势研究预测报告
- 数据结构1234567 本科 中国地质大学开卷参考资料题库及答案
- 中国银行业监督管理委员会办公厅关于商业银行开展代客境外理财业
- (名师整理)最新语文中考《古诗词赏析之忧国诗》专题精练(含答案解析)
- 2016年甘肃政法学院公共管理学院社会调查研究方法(同等学力加试)复试笔试最后押题五套卷
- 2016年直读式定氧探头市场调研及发展趋势预测 (目录)
- 高中语文《念奴娇·赤壁怀古》 教案及练习必修四