代码改变世界

(转)广度优先搜索与深度优先搜索

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

  没有路线