2012-12-15 78 views
1

我正在研究一種算法來查找圖中兩個節點之間的所有路徑。就是這樣,我能來編碼字符串數組所有路徑如下:Java中的字符串數組

String []paths = new String[50]; 

注:我使用的字符串數組存儲的路徑,但我可以將它們存儲在任何其他數據必要時結構。

樣品在我的陣列中的數據會像下表中,注意字母是我的數據僅用於可視化的連字符:

----------- 
| A | B | C | 
----------- 
| D | E | | 
----------- 

所有我需要的是處理上述陣列,並輸出所有的組合如下:我試圖使用迭代方法「循環」來解決這個問題,但我失敗了。我想我們可能會用遞歸來做到這一點,但我不知道如何做到這一點。 此外,我不知道是否有任何數據結構來處理這個問題。更好的存儲路徑而不是一串字符串?

無論如何,這裏就是我的工作與循環:

String []temp = new String[100]; 
for(r=0; r<paths.length ;r++) 
    for(c=0; c<paths[r].length() ;c++) 
     for(j=c+1; j<paths[r].length() ;j+1) 
     temp[r] += paths[j]; 
+4

我敢肯定,你試過的東西,但它沒有工作,對不對?你能分享一些你的代碼嗎?它會使你更容易地幫助你解決問題。 – dasblinkenlight

+5

你忘了添加「請爲我做我的任務」標籤 – Bohemian

+1

@dasblinkenlight我更新了問題。 – user1899713

回答

1

因此正則表達式[AD][BE][C]

這也是一個更好的數據結構:90度旋轉陣列。這將消除檢查長度(ABC與DE)。

與您的數據結構

不過:

int maxPathLength = 3; // TODO calculate 
Set<String> results = new TreeSet<String>(); 
process(paths, "", 0); 

public void process(String[] paths, String prefix, int i, Set<String> results) { 
    if (i >= maxPathLength) { 
     System.out.println(prefix); 
     results.add(prefix); 
     return; 
    } 
    for (String s : paths) { 
     if (i < s.length()) { 
      process(paths, prefix + s.charAt(i), i + 1, results); 
     } 
    } 
} 
+0

添加了'結果'。 –