2017-04-30 72 views
0

我想知道是否有可能從ArrayList中找到最小生成樹。陣列列表中的最小生成樹

這是我目前有:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 


public class GraphReading 
{ 
public static void main(String[] args) throws FileNotFoundException 
{ 
    File f= new File("Bridges.txt"); 
    Scanner sc= new Scanner(f); 

    ArrayList < ArrayList<Integer> > Vertices = new ArrayList<>(); 

    while(sc.hasNext()) 
    { 
     String Line =  sc.nextLine(); 
     String numbers[] = Line.split(" "); 

     ArrayList<Integer> List = new ArrayList<>(); 
     for(int i=0;i < numbers.length ;i++) 
     { 
       if(numbers[i].equals("")==false) 
        List.add( Integer.parseInt(numbers [i])); 
     } 
     Vertices.add(List); 
    } 
    printAllvertices(Vertices); 
} 
public static void printAllvertices( ArrayList < ArrayList<Integer> > Vertices ) 
{ 
    for(int i=0;i< Vertices .size();i++) 
    { 
     System.out.print("Vertice "+i+ " has "); 
      ArrayList<Integer> List = Vertices.get(i); 
      for(int j=0;j<List.size();j++) 
      { 
       System.out.print(List.get(j)+" "); 
      } 
      System.out.println(); 




    } 

} 

} 

我想從每個頂點的只是發現的最小數目,但我不是太肯定會一定工作,我希望它太的方式。

回答

0

當然可以!我發現這個網站有一些關於如何使用PRIM算法做的很好的文檔。

http://www.geeksforgeeks.org/greedy-algorithms-set-5-prims-minimum-spanning-tree-mst-2/

您可能需要一些代碼轉換成左右,但應該是微不足道的。尋找最便宜的邊是一種解決方案,但可能並不總是導致最小生成樹。這樣,你可能會意外地在你的圖表中「繞行」,使你的樹比預期的大。

+0

謝謝你的幫助! –

+0

您可以通過按綠色檢查標記答案爲「回答」,如果它真的有幫助嗎?它可以幫助其他與您具有相同問題的用戶。 :-) – Thoma