2014-11-02 72 views
1

我想實現Warshall的算法來找到鄰接矩陣的傳遞閉包。這是我對功能:我在Warshall算法中缺少什麼?

public static int[][] warshall(int A[][]){ 
    int R[][] = A; 
    for (int k = 1; k < n; k++) { 
     for (int i = 1; i < n; i++) { 
      for (int j = 1; j < n; j++) { 
       if ((R[i][j] == 1) || ((R[i][k] == 1) && (R[k][j] == 1))) { 
        A[i][j] = 1; 
       } 
      } 
     } 
     R = A.clone(); 
    } 
    return A; 
} 

我用下面的鄰接矩陣測試:

0100 
0001 
0000 
1010 

這將導致:

1111 
1111 
0000 
1111 

我不是越來越接近這一點。任何人都可以隨時看到我缺少的東西嗎?

感謝您的任何提示或建議。

+0

我沒有看到任何這段代碼的一部分遍歷頂點或邊。另外,'n'是什麼?它沒有在代碼塊的任何地方定義。 – Makoto 2014-11-02 05:57:24

+0

圖也可以表示爲矩陣 – 2014-11-02 06:10:00

回答

2

我不熟悉這個特定的算法,但Java和許多其他語言(其中大部分實際上的),你應該總是啓動與指數在0和循環不是1

+0

它可以是[Floyd-Warshall](http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm)的音譯,其中循環開始在1並繼續| V |。 – Makoto 2014-11-02 05:57:57

+0

哇......我不敢相信我甚至對這個問題感到困擾。我用作參考的書中列出了每個迭代器初始化爲1的算法,而不是簡單地檢查一下,我只是假設這是正確的。我對這個無知的問題表示歉意,並且感謝我從一開始就嘗試過的一些建議。 – 2014-11-02 06:00:41

+0

哈哈,np。將它標記爲接受然後=) – Eric 2014-11-02 06:01:46