判斷有向圖是否存在回路,除了可以利用拓撲排序方法外,還可以利用______。
A.求關鍵路徑的方法
B.求最短路徑的Dijkstra方法
C.深度優先遍歷算法
D.廣度優先遍歷算法
所有的考研數據結構參考書給出的答案都是C,但我覺得答案C是錯誤的,沒有一個是正確的。
解釋:判斷有向圖是否存在回路可以使用拓撲排序,這毫無疑問。但是深度優先遍歷算法並不能判斷是否存在回路,它只有在有向圖不存在回路的情況下,使用DFS得到逆向的拓撲有序序列而已,這里的條件是“不存在回路”,而不是用來判斷“是否存在回路”,所以可以利用DFS進行拓撲排序,是進行拓撲排序的一種方式,而且是在不存在回路的情況下才能使用的一種拓撲排序方式!在有向圖不確定是否存在回路的時候,你用DFS干嘛?憑什么能判斷是否存在回路????
嚴蔚敏版《數據結構》P183的第二段的第一句:“當有向圖中無環時,也可以利用深度優先遍歷進行拓撲排序,因為圖中無環,則由圖中某點出發進行深度優先遍歷時。。。”,這里限定了條件---“無環”,而且結論也只是“進行拓撲排序”。當然,對DFS程序進行改造,也許是可以判斷的,但是進行了改造。
我說完了,以前總覺得不對勁,今日翻出來細細考究一番。
