2014-11-24 42 views
0

即時嘗試從頂點列表返回傳遞閉包,但我如何使用floyd warshall算法來做到這一點?互聯網中的所有例子都是以二維數組的形式給出的,但是它也可以用於列表嗎?示例G = ABCD→G + = AB AC AD BC BD CD,其中G是頂點列表,G +是傳遞閉包。爲頂點列表實現Floyd-Warshall算法

我實現(錯誤的方式):

public Graph transitiveClosure(LinkedList<Vertex> v) 
    { 

     String graaf = "";  
     Edge e; 
     StringBuffer sb = new StringBuffer(graaf); 

     Iterator<Vertex> i = v.iterator(); 
     Vertex tmp; 
     for(Vertex vertex : v) 
     { 
     System.out.print(vertex); 
     } 

     while(i.hasNext()) {   
     int next = (v.size() + 1) - v.size();           
     tmp =(Vertex) i.next(); 

     if(tmp == v.getFirst()) 
     tmp = (Vertex)i.next(); 
     e = new Edge(v.getFirst().toString() + tmp);       
     sb.append(e); 

     if(tmp == v.get(next)) 
     next++; 
     e = new Edge(v.get(next).toString() + tmp); 
     sb.append(e); 


    } 

     System.out.println(); 

     return new Graph(sb.toString()); 
     }    
} 
+0

請解釋你的例子。你只想要所有的對(i,j)在v列表中指示i 2014-11-24 11:13:41

+0

是的,我需要所有的對 – 2014-11-24 15:08:52

回答

1

,因爲你希望所有對(I,J),其中i和j是與我indicies大於j時,我不明白爲什麼你要Floyd- Warshall在這裏。

int size = v.size(); 
StringBuffer sb = new StringBuffer(graaf); 
for (int i=0;i<size;i++) { 
    for (int j=i+1;j<size;j++) { 
     sp.append(v.get(i)+v.get(j)+" "); 
    } 
} 
+0

我不太確定,但謝謝! – 2014-11-24 18:52:20