2011-11-20 69 views
2

我想使用Jgraph创建图形,然后使用该图形查找最小生成树。使用Jgraph创建图表

如何使用Jgraph?创建图形。


这就是我所实施的。你能告诉我如何使用包中的kruskals算法。我GOOGLE了它,但无法找到任何信息。

import org.jgrapht.*; 
import org.jgrapht.graph.*; 

public class MyGraph { 
    UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>  (DefaultEdge.class); 

    public void addVertex(String name) { 
     // name=new String(); 
     g.addVertex(name); 
    } 

    public void addEdge(String v1,String v2) { 
     g.addEdge(v1, v2); 
    } 

    public UndirectedGraph<String, DefaultEdge> getGraph() { 
     return g; 
    } 
} 
+0

whats jgraph?你能提供一个链接吗?你读过文档/示例代码吗? – yurib

+0

http://www.jgrapht.org/ – nyfer

回答

2

这是用户输入的主要类,例如没有边和顶点用于创建图形的生成树的图形。以下是这个问题的完整答案。

import java.util.Scanner; 

public class Main { 

    public static void main(String args[]) { 

     int x; 
     Scanner sc=new Scanner(System.in); 
     MyGraph my=new MyGraph(); 
     System.out.println("Enter the no of vertices"); 
     int no_of_ver=sc.nextInt(); 

     for(int i=1;i<=no_of_ver;i++) { 
      System.out.println("Enter vertex"+i); 
      my.addVertex(sc.next()); 
     } 

     do { 
      System.out.println("Enter the edges"); 
      String e1=sc.next(); 
      String e2=sc.next(); 
      my.addEdge(e1, e2); 
      // my.setEdgeWeight(); 
      System.out.println("Continue... Yes:1 ********** No:0"); 
      x=sc.nextInt(); 
     } while(x==1); 

     System.out.println("Graph\n"+my.getGraph().toString()); 
     System.out.println("\n\n**********Spanning Tree*********"); 
     my.getSpanningTree(); 
     // System.out.println("\nSpanning Tree Cost"); 
     //my.getSpanningTreeCost(); 
    } 
} 

下面的MyGraph类完成了通过边和计算生成树来创建图的所有工作。我用jgrapht库创建图表

import org.jgrapht.*; 
import org.jgrapht.graph.*; 
import org.jgrapht.alg.KruskalMinimumSpanningTree; 

public class MyGraph { 

    private UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class); 
    static final double DEFAULT_EDGE_WEIGHT=19; 
    DefaultWeightedEdge>(DefaultWeightedEdge.class); 
    private DefaultWeightedEdge e1; 

    public void addVertex(String name) { 
     g.addVertex(name); 
     //graph.addVertex(name); 
    } 

    public void addEdge(String v1,String v2) { 
     g.addEdge(v1, v2); 
     // e1=graph.addEdge(v1, v2); 
    } 

    /*public void setEdgeWeight() { 
     graph.setEdgeWeight(e1, DEFAULT_EDGE_WEIGHT);   
    }*/ 

    public UndirectedGraph<String, DefaultEdge> getGraph() { 
     return g; 
    } 

    /*public SimpleWeightedGraph<String,DefaultWeightedEdge> getGraph() { 
     return graph; 
    }*/ 

    public void getSpanningTree() { 
     KruskalMinimumSpanningTree k=new KruskalMinimumSpanningTree(g); 
     System.out.println(k.getEdgeSet().toString()); 
     //KruskalMinimumSpanningTree k1=new KruskalMinimumSpanningTree(graph); 
     //System.out.println(k1.getEdgeSet().toString()); 
    } 

    /*public void getSpanningTreeCost() { 
     KruskalMinimumSpanningTree k=new KruskalMinimumSpanningTree(graph); 
     System.out.println(k.getSpanningTreeCost()); 
    }*/ 
} 
+0

我尝试使用jGraphT库...我在日志中获得边缘和顶点细节,但没有显示在UI上。任何想法我失踪? – seema