2013-12-19 3 views
0

Я написал программу 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); 
     } 
    } 
    } 

} 
+0

Вы хотите написать код или хотите готовый к использованию инструмент? Если сначала, пожалуйста, укажите свой код – Donvino

+1

JFreeChart - http://www.jfree.org/jfreechart/ –

+0

@Donvino, код обновлен – saopayne

ответ

2

Посмотрите на JUNG или GraphViz и его Java порт Grappa.

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

+0

Могу ли я произвести эту визуализацию сети через несколько часов? Насколько сложно интегрировать использование моего кода выше? – saopayne

+0

Да, вы можете быть в состоянии работать примерно в это время – GrahamA

1

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

+0

Могу ли я произвести эту визуализацию сети через несколько часов? Насколько сложно интегрировать использование моего кода выше? – saopayne

+0

Возможно. Это зависит от ваших навыков. Попробуйте взглянуть на некоторые простые примеры [1] (https://docs.google.com/document/d/1w-8dF6GtYnlL_IftWA0epgTsaIsuufCFTkSPsSFY-30/edit) [2] (http://www.cs.mun.ca/ ~ hoeber/training/cs4767/notes/04-prefuse /) [3] (http://stackoverflow.com/a/7600982/1725096). –

Смежные вопросы