Switch to full style
Java2 codes,problems ,discussions and solutions are here
Post a reply

Java code to draw shortest path tree

Wed Dec 12, 2012 10:17 pm

Hello, I have this java code which draws to me 100 nodes(with the sink node)(like the figure) that are connected by links, at the end I will get a tree , now I need to redraw the tree in(shortest path tree using prim algorithm )I have the nods in ( x,y) coordinate, and the number of hops from any node to the sink node and the parent for each node(these result I got them from my c++ prim algorithm code )
I’m really confused and I don’t know how to improve the code to redraw the shortest path tree
Any suggestions or comments will be appreciated

Code:
package heuristic;
import javax.swing.*;
import java.awt.Color;
import java.io.*;
import java.util.*;
import java.awt.Graphics;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


public class multitreeplot extends JFrame {
    public void paint(Graphics paint){
        super.paint(paint);
      int[][] data;
      int NMax = 500; // number of nodes in the topology
      int dx = 100, dy = 100 , rectSize = 500;
        data = new int[NMax][2];
      int Ovalsize = 6;
      int Plus = 1;
      double radiorange =50;
     try{
//nodes
        
    FileReader fG = new FileReader("OriginalTopoPos.txt");
      BufferedReader bufReadG = new BufferedReader(fG);
//sink
      FileReader fSinks = new FileReader("SinksFile.txt");
      BufferedReader bufReadSinks = new BufferedReader(fSinks);

           setTitle("MultiTree Drawer");
         
         
         // The whole background
         paint.setColor (Color.white);
          paint.fillRect (0,0,700,700);
         
          // Determine the size of the area.
          paint.setColor (Color.black);
           paint.drawRect (dx-1,dy-1,rectSize+1,rectSize+1);
           paint.drawRect (dx-2,dy-2,rectSize+1,rectSize+1);
           paint.setColor (Color.white);
           paint.fillRect (dx+1,dy+1,rectSize-2,rectSize-2);

           //Plot the original topology.
          NMax = 0;
          String lineG =new String( bufReadG.readLine());
           while (lineG != null){
              int index= lineG.indexOf("-");
            double x= (new Double(lineG.substring(0, index))).doubleValue();
            double y= (new Double(lineG.substring(index+1, lineG.length()))).doubleValue();

            // ** Reflect the image
                  // Aseel, in your experiment do not divide y, x by 10///
             y=rectSize-y/10;                                             
               x = (int)(x/10.0) + 100;
              y = (int)(y) + 100;              
              data[NMax][0] = (int)(x);
              data[NMax][1] = (int)(y);
                           
              System.out.println((int)x+","+(int)y);
           
               String s = String.valueOf(NMax);
                paint.setColor (Color.gray);
                paint.drawString(s, (int)x+4,(int)y-1);
                
                paint.setColor (Color.blue);
                paint.drawOval((int)x-4,(int)y-4, Ovalsize+Plus, Ovalsize+Plus);
             
             paint.setColor (Color.blue);
                paint.fillOval((int)x-3,(int)y-3, Ovalsize, Ovalsize);
                lineG = bufReadG.readLine();
               NMax++;
           }
           
           
           
           //Plot the links in original Topology.
           // *********************************
      //   
          for (int i =0 ; i < NMax; i++)
            for (int j =i ; j < NMax; j++){
               double distance = Math.pow(data[i][0]-data[j][0],2)+ Math.pow(data[i][1]-data[j][1],2);
                distance = Math.sqrt(distance);
                paint.setColor (Color.gray);
                if (distance <= radiorange)
                   {
                      //gradient
                      //pink
                      //magenta
                      //cyan
            paint.setColor (Color.magenta);
                   paint.drawLine( data[i][0], data[i][1], data[j][0],data[j][1] );
                   }
         
                
            }
   //     */

           
           //Plot Sink Nodes.
         int Sinks = 0;
         String lineSinks =new String( bufReadSinks.readLine());
         while(lineSinks != null){
            int index= lineSinks.indexOf("-");
            double x= (new Double(lineSinks.substring(0, index))).doubleValue();
            double y= (new Double(lineSinks.substring(index+1, lineSinks.length()))).doubleValue();
         
            //Reflect the image
            y=rectSize-y/10;                                             
               x = (int)(x/10.0) + 100;
              y = (int)(y) + 100;   
             
             paint.setColor (Color.blue);
                paint.drawRect((int)x-5,(int)y-4, Ovalsize+Plus, Ovalsize+Plus);
             
             paint.setColor (Color.green);
                paint.fillRect((int)x-4,(int)y-3, Ovalsize, Ovalsize); 
                   
                //String s = String.valueOf(NMax);
                String s = "Sink";
                paint.setColor (Color.gray);
                paint.setColor (Color.black);
                paint.drawString(s, (int)x+12,(int)y-5);       
               
             lineSinks = bufReadSinks.readLine();
                Sinks++;
           }
           //System.out.println(Sinks);
           
           
     }catch(Exception e){
        System.out.println(e);
        System.exit(-1);
     }

   }

    public multitreeplot(){
        super("");
      int WSize = 700;
        setSize(WSize,WSize);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
public static void main(String [] args) throws Exception{
    JFrame win= new JFrame();
    multitreeplot drawing= new multitreeplot();
    drawing.setVisible(true);
}
}
//System.out.println((int)x+","+(int)y);

[img]

[/img]



Post a reply
  Related Posts  to : Java code to draw shortest path tree
 shortest path algorithm java     -  
 Dijkstra ( Shortest Path )     -  
 java code for decision tree algorithm     -  
 draw General Path     -  
 Take tree nodes then create new tree with another root     -  
 java tree problem     -  
 Java Binary Tree     -  
 Draw Filled Arc php code     -  
 Draw An Arc in java     -  
 SHORTEST JOB FIRST     -  

Topic Tags

Java Algorithms