java - Drawing graph for dijkstra algorithm -


i've implemented dijkstra's alorithm want implement gui it. i'll have few quesions guys.

public class dijkstra {  public static void main(string args[]) {      vertex v0 = new vertex("a");     vertex v1 = new vertex("b");     vertex v2 = new vertex("c");     vertex v3 = new vertex("d");     vertex v4 = new vertex("e");     vertex v5 = new vertex("f");     vertex v6 = new vertex("g");     vertex v7 = new vertex("h");      v0.adjacencies = new edge[]{new edge(v1, 9), new edge(v2, 1), new edge(v6, 9), new edge(v3, 2)};     v1.adjacencies = new edge[]{new edge(v0, 9), new edge(v4, 4)};     v2.adjacencies = new edge[]{new edge(v0, 1), new edge(v4, 2), new edge(v5, 5)};     v3.adjacencies = new edge[]{new edge(v0, 2), new edge(v6, 5), new edge(v7, 1)};     v4.adjacencies = new edge[]{new edge(v1, 4), new edge(v2, 2), new edge(v5, 1)};     v5.adjacencies = new edge[]{new edge(v4, 1), new edge(v2, 5), new edge(v6, 1), new edge(v7, 4)};     v6.adjacencies = new edge[]{new edge(v0, 9), new edge(v5, 1), new edge(v3, 5), new edge(v7, 2)};     v7.adjacencies = new edge[]{new edge(v5, 4), new edge(v6, 2), new edge(v3, 1)};      vertex[] vertices = {v0, v1, v2, v3, v4, v5, v6, v7};      computepaths(v0);      (vertex v : vertices) {         system.out.println("distance " + v + ": " + v.getmindistance());         list<vertex> path = getshortestpathto(v);         system.out.println("path: " + path);     }  }  public static void computepaths(vertex source) {     source.setmindistance(0);      priorityqueue<vertex> vertexqueue = new priorityqueue<vertex>();     vertexqueue.add(source);      while (!vertexqueue.isempty()) {         vertex u = vertexqueue.poll();          (edge e : u.adjacencies) {             vertex v = e.target;             int weight = e.weight;             int distancethroughu = u.getmindistance() + weight;              if (distancethroughu < v.getmindistance()) {                 vertexqueue.remove(v);                 v.setmindistance(distancethroughu);                 v.previous = u;                 vertexqueue.add(v);             }         }     } }  public static list<vertex> getshortestpathto(vertex target) {     list<vertex> path = new arraylist<vertex>();      (vertex vertex = target; vertex != null; vertex = vertex.previous) {         path.add(vertex);     }      collections.reverse(path);     return path; } 

}

this how implementations looks (without gui). i've seen there library called jung graphs , downloaded it. i've tried draw graph adding following code main method.

simplegraphdraw f = new simplegraphdraw();      directedsparsegraph g = new directedsparsegraph();     g.addvertex(v0);     g.addvertex(v1);     g.addvertex(v2);     g.addvertex(v3);     g.addvertex(v4);     g.addvertex(v5);     g.addvertex(v6);     g.addvertex(v7);     g.addedge("edge1", v0, v1);     g.addedge("edge2", v0, v2);     g.addedge("edge3", v0, v6);     g.addedge("edge4", v0, v3);     g.addedge("edge5", v1, v0);     g.addedge("edge6", v1, v4);     g.addedge("edge7", v2, v0);     g.addedge("edge8", v2, v4);     g.addedge("edge9", v2, v5);      visualizationimageserver vs = new visualizationimageserver(new circlelayout(g), new dimension(200, 200));      jframe frame = new jframe();     frame.getcontentpane().add(vs);     frame.setdefaultcloseoperation(jframe.exit_on_close);     frame.pack();     frame.setvisible(true); 

how can arrange of vertices way want them (they in circle right now) ?

how can place vertex name "a" inside red circle in gui, each vertex name should displayed.

how can add each weight inside gui on top of line between 2 vertices ?

thanks in advance

while not familiar jung, had implemented gui dijkstra's algorithm college project (source code).

it based on java swing's graphics2d object draw edges. since have implemented dijkstra's algorithm, might interested in code given below drawing edge (line arrow , label). uses trigonometry draw directional arrow.

private void drawlinesegment(point from, point to, color c, int size, string label, graphics2d g) {     g.setcolor(c);     g.setstroke(new basicstroke(size));     int x1 = from.getx();     int y1 = from.gety();     int x2 = to.getx();     int y2 = to.gety();     g.drawline(x1, y1, x2, y2);     int sx = (int) ((x1 + x2) / 2.1);     int sy = (int) ((y1 + y2) / 2.1);     int cx = (int) ((x1 + x2) / 2);     int cy = (int) ((y1 + y2) / 2);     int d = 10;     double angle = util.angle360(from, to);     double angleplus45 = angle + 45;     if (angleplus45 > 360)         angleplus45 = angleplus45 % 360;     double angleminus45 = angle - 45;     if (angleminus45 < 360)         angleminus45 = angleminus45 + 360;     angleplus45 = math.toradians(angleplus45);     angleminus45 = math.toradians(angleminus45);     int ax1 = (int) (cx - d * math.cos(angleplus45));     int ay1 = (int) (cy - d * math.sin(angleplus45));     int ax2 = (int) (cx - d * math.cos(angleminus45));     int ay2 = (int) (cy - d * math.sin(angleminus45));     g.drawline(cx, cy, ax1, ay1);     g.drawline(cx, cy, ax2, ay2);     g.drawstring(label, sx, sy); } 

this in `src/wban/simulate/view/swingviewer.java. if interested in running code download runnable jar. project documentation available here , here.


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

css - Make div keyboard-scrollable in jQuery Mobile? -

ruby on rails - Seeing duplicate requests handled with Unicorn -