(转)广度优先搜索与深度优先搜索
2012-09-12 22:44 neu_zjujunge 阅读(271) 评论(0) 编辑 收藏 举报迷宫问题的解法
栈与深度优先搜索
过程:
将起点标记为已走过并压栈
while(非空){
从栈顶弹出一个点p;
if(p是终点)
break;
否则沿右、下、左、上四个方向搜索相邻的点;
if(和p相邻的点有路可走,并且还没有走过)
将相邻的点标记为已走过并压栈,它的前趋就是p点;
}
if(p是终点){
打印p点坐标
while(p点有前趋){
p点 = p点的前趋;
打印p点的坐标;
}
}else
没有路线;
队列与广度搜索过程
将起点标记为已走过并入队
while(队列非空){
出队一个点p;
if(p这个点是终点)
break;
否则沿右、下、左、上四个方向搜索相邻的点
if(和p相邻的点有路可走,并且还没有走过)
将相邻的点标记为已走过并入队,它的前趋就是刚出对的p点;
}
if(p点是终点){
打印p点的坐标;
while(p点有前趋){
p点 = p点的前趋;
打印p点的坐标;
}
}else
没有路线