0
我有一個有向圖,例如n×n階矩陣。
我需要找到其中存在的所有循環以及循環中涉及的頂點。在有向圖中找出一個循環中的所有頂點
下面是一個例子:
A B C D
0 1 1 1
1 0 1 0
1 0 0 0
1 0 0 0
輸出應該類似於:
No.of cycles found : 4
A->B->A
A->B->C->A
A->C->A
A->D->A
我有一個有向圖,例如n×n階矩陣。
我需要找到其中存在的所有循環以及循環中涉及的頂點。在有向圖中找出一個循環中的所有頂點
下面是一個例子:
A B C D
0 1 1 1
1 0 1 0
1 0 0 0
1 0 0 0
輸出應該類似於:
No.of cycles found : 4
A->B->A
A->B->C->A
A->C->A
A->D->A
你應該尋找基本循環,其中沒有頂點(除了開始/結束)出現不止一次。在那種情況下,存在線性時間算法(線性節點+邊)。例如,請參閱http://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF。這來自第二個答案Finding all cycles in a directed graph,這比第一個恕我直言更好。
那麼你的問題到底是什麼? – ChriPf
我想要算法或邏輯或代碼來找到週期中涉及的頂點列表 – user3035457
這是不可能的多時間,因爲如果它是那麼你可以解決在多時間哈密頓路徑問題,並且這個問題是NP完全問題。更簡單地說,可能的週期數是巨大的,所以這在多項式時間中是不可能的。你可能會蠻力的(遞歸地嘗試所有的路徑)並記錄回到源代碼並打印出來。有點像DFS,除了你可以多次訪問一個節點。不過,即使略微合理的尺寸圖也需要很長時間,而且我不確定是否有更快的方法。 – Jimmy