可以使用搜索算法(BFS和DFS)来获得最短路径吗?

时间:2018-10-28 10:00:22

标签: algorithm search breadth-first-search dfs

在我的AI课程中,我了解了BFS,DFS和UCS。在我的算法课程中,我学习了Dijkstra的算法。

我们是否仅应用BFS和DFS之类的搜索算法来确定某个特定节点是否存在,或者它是否能像Dijkstra算法那样提供最短路径?

1 个答案:

答案 0 :(得分:1)

Dijkstra的算法只是BFS的一种概括-如果所有边缘权重都等于1,则BFS在概念上与Dijkstra相同。

如果所有边缘权重均等于1,

BFS (宽度优先搜索)将为您提供最短的路径(如成本最低),但不会(不必要),因为它探索节点的顺序根本不取决于边缘权重。

DFS (深度优先搜索)不一定会为您提供最短的路径,因为它一次只探索一条任意路径-也许您很幸运,而且该路径是最短的路径,但通常不会的。它会为您提供树中最短的路径,但这仅是因为到任何给定节点的路径都完全相同。

UCS (统一成本搜索)works very similarly to Dijkstra's algorithm,并且还会返回最短路径,但返回到单个目标节点,而不是所有其他节点。

示例

对于下图,假设我们从A开始,然后转到E。

    A 1 C 1 D
    O---O---O
100 |       | 1
    O-------O
    B  100  E

BFS和DFS都可以或将返回更昂贵的路径(A-B-E = 200,而不是A-C-D-E = 3)。

BFS将访问B(A-B)和C(A-C),然后访问E(A-B-E)和D(A-C-D)。此时,由于已达到目标,它将停止,并返回更长的路径A-B-E。

DFS可以开始任意访问B或C。如果它首先访问C,它将返回最短路径A-C-D-E,但是如果它首先访问B,它将探索A-B-E并返回该较长路径。