既然bfs 能用到spfa 为什么dfs 不可以呢
dfs 也能遍历所有点。
我们用一个循环队列来存储需要继续迭代的节点,
实现时使用类似广度优先搜索的方式。那么我们是否可以使用搜索的另一利器:
深度优先呢?
回忆之前的算法,由于采用广度优先的思想,每当我们扩展出一个新的节点,总是把它放到队列的末尾,其缺点是中断了迭代的连续性。而实际上如果采用深
度优先的思想,我们可以直接从这个新节点继续往下扩展。于是算法的实现方式
可以改成不断从新节点往下递归进行求解。
而对于负环的判断则显得更为简单,因为假如存在负环a1->a2->….ak->a1,
那么算法运行时,会从某个点a1开始Dfs,最后又回到了这个点。所以只需用一个
辅助数组记录当前节点是否在递归栈中便可及时检测出负环。