我想知道是否可以从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 :(得分:0)
当然可以!我发现这个网站有一些很好的文档,说明如何使用PRIM的算法。
http://www.geeksforgeeks.org/greedy-algorithms-set-5-prims-minimum-spanning-tree-mst-2/
您可能需要转换一些代码,但这应该是微不足道的。寻找最便宜的边缘是一种解决方案,但可能并不总是导致最小的生成树。这样,您可能会在图表中意外地“走弯路”,使您的树比预期的大。