本網站有許多關於我的問題的文章。 我有一個矩陣例如(10 x 10),代表10個節點。稱爲MyMat的矩陣(9,9)如何在visual basic中刪除圖形中的循環或循環?
此矩陣的行表示源節點(來自節點),列表示目標節點(去節點)。它有14個隨機分佈的鏈接。非零值表示節點之間的連接。
0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0
我想要的是防止系統中每個節點的循環(循環)。例如: 節點1:沒有迴路
節點2:2,9,7,8,10,2.這裏存在循環,因爲它以2開始並以2結束。我想要防止循環在這個網絡。這意味着:MyMat(9,1)必須爲0 節點2:2,9,7,8,10,3,2.這意味着MyMat(2,1)必須爲0
節點3:否環
節點4:4,7,8,4。這意味着MyMat(7,3)必須爲0
節點5:5,8,10,6,5這意味着,MyMat( 5,4)必須爲0
節點6:無環路
節點7:無環
節點8:無環路
節點9:無環路
節點10:無環
4連接,從上述矩陣中刪除。
我已經通過一種稱爲深度優先搜索的技術做到了這一點,但它非常緩慢並且加重了我程序的運行時間,尤其是當我使用60個節點和100個連接時! 幾個編程示例可以找到,如果你谷歌它。
有沒有更容易(更快)的方式在Visual Basic或C#中做到這一點?
HI 感謝您的回覆。 您能否用我的例子來證明您的答案?即使用我在問題中描述的邊和節點矩陣。 感謝 – 2010-08-15 15:43:31
我試過,但沒有成功,請指教 LinkToSource(0) GreyList.Add(0) 公共職能LinkToSource(BYVAL FROMNODE作爲整數)爲雙 對於i = 0到9 如果馬特(FROMNODE,I)> 0,則 如果GreyList.Contains(I)然後 如果不BlackList.Contains(ⅰ)接着 馬特(FROMNODE,I)= 0 BlackList.Add(ⅰ) BlackList.Add(FROMNODE) End If Else GreyList.Add(i) LinkToS wece(i) End If End If Next i End Function – 2010-08-16 18:52:14