最短路径 - 广度优先搜索

时间:2015-10-19 01:50:05

标签: algorithm queue breadth-first-search

我有一份论文作业,我绝不会要求任何代码帮助,只是帮助理解如何解决这个问题。

我们提供最少的材料,而教授只是浏览广度优先搜索的内容。

我们需要通过迷宫找到自己的方式,迷宫就会被创造,你的人每次都会落在一个随机的空间里。

当按下该键时,当前位置被发送到该功能,从那里我们必须使用广度优先搜索来找到最短路径。

现在我从这个搜索算法中理解的是:

  1. 必须在级别
  2. 中搜索树或图
  3. 我们需要将路径存储在a queue(FIFO)
  4. 然后找到最终项目的所有路径中的最短路径
  5. 我究竟如何解决这类问题?

    我们知道开始和结束,而且我们可以轻松获得当前块的所有邻居块。

    非常感谢。

1 个答案:

答案 0 :(得分:0)

你似乎错过了广度搜索的一些细微差别。

  

必须在级别

中搜索树或图

这是对的。虽然你不一定会跟踪一组不同的等级,但你可以自然地继续完成下一个等级。

  

我们需要将路径存储在队列(FIFO)

不是真的。您通常将未来节点存储在队列中进行探索,而不是整个路径。如果需要,维护路径是一个额外的问题。

  

然后找到最终项目的所有路径中的最短路径

在具有均匀边缘权重的图形中,这是不必要的。您找到的第一条路径最短。 (请注意,对于BFS来说,均匀边缘权重的要求是正确的)

目标节点的BFS的一般代码如下所示:

q := new Queue
q.enqueue(start)
goal_found := false
while( q is not empty )
    n := q.dequeue()
    if n is goal then
        goal_found := true
        break
    for each neighbour v of n
        q.enqueue(v)

if(goal_found)
    //do something (success)
else
    //do something else (failure)

如果您希望跟踪遍历的路径,可以添加到此骨架中,还可以防止在路径上加倍(在无向图中这对于确保终止非常重要),防止重复处理节点一般(必要时如果有周期而你想终止),跟踪长度等等。但这是它的基本框架。