BFS+优先队列——迷宫最短路径——两种最优方法比较及详细图解

来源:互联网 发布:拓扑算法数学建模 编辑:程序博客网 时间:2024/05/21 06:49

http://blog.csdn.net/qq_36523667/article/details/78638354

这个链接里是一道迷宫题。用到了BFS+优先队列。


我一直百思不得其解优先队列到底优先在哪了?我感觉和直接bfs没啥区别?后来证明做法不一样,思路也不一样。

所以这里引出另一种最优的做法。


正常的bfs


黑色是当前的点,黄色是即将探索的点,把黄色的依次入队列,再依次出队列,一次出一个。

假设你先出的是右边那个点。

那么右边的点的右边,下边都会到队列的最后。再出第二个黄色点,第二个黄色的下面的点入队列(因为右边的点已经入了),加入到最后面,依次出。


优先队列+BFS


(假设3代表后入要多等待3秒,是一种不友好的情况)不管我们下面的那个黄点和3这个黄点哪个先入队列,3都会被优先队列内部的机制处理在队列的最后端。

所以当你第一个黄点出队列的时候,第一个黄点的右边,下边又会入队列。

但是根据优先队列的机制,新入的两个点又会跑到3的前面。

所以我们这种做法是规避了比较耗时的操作,让耗时的或者不友好的点最后出队列,可能可以让我们更快抵达终点。



而我的做法。



我是采用一种集体出发的模式,如第一个图,我们两个黄色即将探访的区域,同时抵达。

把原来那个点置位灰色,代表已走过,把所有黑色点作为当前点,再找出所有将探访的点。

就这样一步一步全部像病毒一样蔓延了出去,就算遇到了同上面例子讲的情况3这种不友好低优先级的点,

我也是一样处理,不过会在3那个点停留3秒。

这样的话是把所有可能的情况都走遍了。



上述bfs+优先队列和我的方法,不能说谁更好。两种方法适合的题型不一样。

阅读全文
0 0