Графическая визуализация

83
8

Я написал java-программу для вычисления минимального связующего дерева со случайно сформированными 100 вершинами и случайным образом созданным 800 ребрами. Я хотел бы построить график, который эта программа генерирует всякий раз, когда я запускаю ее. Кто-нибудь знает какой-нибудь инструмент, который может помочь с этим? Мой код Java ниже:

public static void main (String [] args)
{
Random random = new Random();
Edge[] edges = new Edge[800];
for(int i = 0; i < edges.length; i++) {
edges[i] = new Edge(
Integer.toString(random.nextInt(100)),
Integer.toString(random.nextInt(100)),
random.nextInt(100) //weights from 0 to 99
);
}

System.out.println("Graph");
KEdges vv = new KEdges();

for (Edge edge : edges) {
System.out.println(edge);
vv.insertEdge(edge);
}
System.out.println("Implementing Kruskal algorithm");
int total = 0;
for (Edge edge : vv.getEdges()) {
System.out.println(edge);
total += edge.getEdgeWeight();
}
System.out.println("Total weight is " + total);
}

static class Edge implements Comparable<Edge>
{
String vertexA;
String vertexB;
int weight;

public Edge(String vertexA, String vertexB, int weight)
{
this.vertexA = vertexA;
this.vertexB = vertexB;
this.weight = weight;
}

public String getVertexA()
{
return vertexA;
}

public String getVertexB()
{
return vertexB;
}

public int getEdgeWeight()
{
return weight;
}

public String toString()
{
return "("+ vertexA + ", " + vertexB + ") : weight "+ weight ;
}
@Override
public int compareTo(Edge o) {
return (this.weight < o.weight)? -1 : 1;
}

}

static class KEdges
{
Vector<HashSet<String>> vertexGroups = new Vector<HashSet<String>>();
TreeSet<Edge> kruskalEdges = new TreeSet<Edge>();

public TreeSet<Edge> getEdges()
{
return kruskalEdges;
}

public HashSet<String> getVertexGroup(String vertex)
{
for (HashSet<String> vertexGroup : vertexGroups)
{
if (vertexGroup.contains(vertex))
{
return vertexGroup;
}
}
return null;
}

public void insertEdge(Edge edge)
{
String vertexA = edge.getVertexA();
String vertexB = edge.getVertexB();

HashSet<String> vertexGroupA = getVertexGroup(vertexA);
HashSet<String> vertexGroupB = getVertexGroup(vertexB);

if (vertexGroupA == null)
{
kruskalEdges.add(edge);
if (vertexGroupB == null){
HashSet<String> htNewVertexGroup = new HashSet<String>();
htNewVertexGroup.add(vertexA);
htNewVertexGroup.add(vertexB);
vertexGroups.add(htNewVertexGroup);
}
}
else{
if (vertexGroupB == null)
{
vertexGroupA.add(vertexB);
kruskalEdges.add(edge);
}
else if (vertexGroupA != vertexGroupB)
{
vertexGroupA.addAll(vertexGroupB);
vertexGroups.remove(vertexGroupB);
kruskalEdges.add(edge);
}
}
}

}

спросил(а) 2013-12-19T11:38:00+04:00 6 лет, 11 месяцев назад
1
Решение
71

Взгляните на JUNG или GraphViz и его java-порт Grappa.

Я обычно использую JUNG

ответил(а) 2013-12-19T11:54:00+04:00 6 лет, 11 месяцев назад
58

У меня был хороший опыт работы с Prefuse. В частности, интеграция моделей иностранных данных.

ответил(а) 2013-12-19T12:01:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема