2015-09-28 36 views
1

我正在尋找Perl腳本可以檢測有向圖中的所有循環節點的問題的解決方案? 例如,我有如下圖:使用Perl查找有向圖中的所有循環依賴關係

A<-N<-G<-L<- A<-B<-C<-D<-E<-F<-A Be a Graph with cyclic edges. 
use strict; 
use warnings; 
my @graphNodes=(A,N,G,L, A,B,C,D,E,F,A); 
my depEdges= dependBy(); #Let dependBy be hypothetical function that return immediate dependents. 

在代碼休息,我需要幫助的邏輯收集其參與循環依賴的所有節點。例如,就我而言,在節點'A'上,存在循環依賴關係。我怎樣才能遞歸實現dependBy函數來查找循環邊或依賴關係?

+1

究竟什麼是你的問題?你希望我們爲你寫這個嗎? – simbabque

+0

@simbabque並非如此。我已經提到過。我想在有向圖上找到節點上的循環依賴。只需要合理的幫助。 – Analyzer

+0

不確定你的依賴邊緣是什麼意思。所有節點都在一個圓圈「依賴」?你想在圖中出現的每個定向圓中找到節點嗎?那麼在你的示例圖中,你會輸出2個圈子中涉及的2組節點嗎? – hepcat72

回答

1

雖然這不是概念上的幫助,但它是最快的解決方案:檢查是否有人已經找到解決方案。在這種情況下,您可以使用CPAN的Graph模塊來執行此操作。

use strict; 
use warnings; 
use feature 'say'; 
use Graph; 

my $g = Graph->new; 

my @edges = qw(A B C D E F A); 
for (my $i =0; $i < $#edges; $i++) { 
    $g->add_edge($edges[$i], $edges[$i+1]); 
} 

say $g; 
say "is cyclic" if $g->is_cyclic; 
say $g->find_a_cycle; 

這將輸出:

A-B,B-C,C-D,D-E,E-F,F-A 
is cyclic 
FABCDE 
+0

如果不使用圖形模塊?在我的情況下,「dependby」函數產生直接相關的邊緣。 – Analyzer

+0

@Analyzer你應該可以用Graph來建立它。但對於純粹的算法幫助,SO恐怕是問這個問題的錯誤地方。我們幫助解決眼前的問題。因爲這不是Perl問題。 – simbabque

+0

感謝您的努力! – Analyzer