2017-04-30 47 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