这是一个面试问题。
在有向图中,您如何找到一个循环?是否有可能找到使用BFS,为什么BFS优于DFS。
AFAIK,DFS在这种情况下是一个明显的赢家,因为它很容易找到周期,并且在内存方面更有效。那么在这种情况下使用BFS有什么好处,我不知道。
答案 0 :(得分:1)
在执行BFS时,您将在仅开发O(B^d)
个节点时找到循环,其中B
是分支因子,d
是从源到的循环+标头的大小它。 (如果BFS的来源在循环中,则循环的长度)。
DFS无法保证这一点,并且可能在找到周期之前发现整个图表。
答案 1 :(得分:0)
使用哪种算法来找到解决方案的答案通常是"它取决于"。
是什么样的图表?统计上,周期发生在哪里?如果图形非常深,并且周期往往发生在浅部分,那么BFS显然是可取的。
使用迭代深化可以减轻BFS的内存使用。
答案 2 :(得分:-1)
在定向图中,当且仅当存在back edge
时才会出现循环。后备是指向自身或指向其祖先的边缘