Hola! Este es mi primer post. Aqui les dejo el codigo de Dijkstra en Java, es con graficos, esta muy sencillo y hace lo esencial. Aun le falta mucho espero usteds lo corrijan y lo mejoren y despues me pasen el codigo, ok? lo hicen netBeans y me lo dejaron en mi clase de Investigacion de Operaciones. Bueno creas un paquete llamado Ruta la primera clase se llama Menu1.java /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Ruta; import java.awt.*; import javax.swing.*; import java.awt.event.*; //import pruebas.VectorRes; /** * * @author paty */ public class Menu1 extends JFrame { private MenuBar mimenu; private Menu archivo; private MenuItem nuevo; private MenuItem impresion; private MenuItem salir; private Menu edicion; private MenuItem nodos; private MenuItem lazos; private MenuItem resultado; private int opcion,n; private int clic,countNodos,nodoEncontrado,countLazos; private int cordx1,cordy1; private JLabel label; private JTextField text; private JButton button; private JScrollPane scroll; private int[][] coordenadas; private int[][] lazosYdistancias; private int[][] lineas; private InputGraph ex; private int[] r1; //private int cordx2,cordy2; public Menu1 () { //crear nuestra ventana para nuestro menu opcion=0; clic=0; cordx1=0; countNodos=0; countLazos=0; nodoEncontrado=0; //cordx2=0; cordy1=0; n=0; r1=new int[20]; coordenadas= new int[20][2]; lazosYdistancias=new int[20][3]; lineas=new int[20][6]; //cordy2=0; this.setSize(800,600); this.setVisible(true); //this.setLayout(null); //label = new JLabel(); //crear Menu mimenu=new MenuBar(); setMenuBar(mimenu);//muestra el menu en nuestra ventana //mimenu.add(archivo) ; //crear la pestaña archivo archivo = new Menu("Archivo"; //crear opciones de archivo nuevo=new MenuItem("Nuevo"; impresion= new MenuItem("Impresion"; salir= new MenuItem("Salir"; //agregamos las opciones a nuestra pestaña. archivo.add(nuevo); archivo.add(impresion); archivo.add(salir); edicion=new Menu("Edicion"; nodos =new MenuItem("Nodos"; lazos =new MenuItem("Lazos"; resultado=new MenuItem("Resultados"; edicion.add(nodos); edicion.add(lazos); edicion.add(resultado); Clic cl=new Clic(); //crea un objeto llamado cl es de tipo Clic //agregarle a nuestras opciones un click edicion.addActionListener(cl); nodos.addActionListener(cl); lazos.addActionListener(cl); resultado.addActionListener(cl); archivo.addActionListener(cl); nuevo.addActionListener(cl); impresion.addActionListener(cl); salir.addActionListener(cl); mimenu.add(archivo);//agrego archivo al menu principal mimenu.add(edicion); //add(label); Clic2 cl2=new Clic2(); Box boxNorte1 = Box.createVerticalBox(); label= new JLabel("teclea el numero de nodo para dibujar su ruta mas corta"; text = new JTextField(); button=new JButton("Enviar"; label.setBounds(0,0,400,20); label.setVisible(true); label.setEnabled(false); text.setBounds(0,30,100,20); text.setVisible(true); text.setEnabled(false); button.setBounds(0,60,100,20); button.setVisible(true); button.setEnabled(false); button.addActionListener(cl2); addMouseListener(new RatonListener()); boxNorte1.add(label); boxNorte1.add(text); boxNorte1.add(button); add( boxNorte1, BorderLayout.NORTH ); //scroll = new JScrollPane(); //add(scroll); pack(); } public class Clic implements ActionListener { public void actionPerformed(ActionEvent e) { MenuItem obj=(MenuItem)e.getSource(); if(obj==nodos) opcion=1; if(obj==lazos) opcion=2; if(obj==resultado) { label.setEnabled(true); text.setEnabled(true); button.setEnabled(true); //repaint(); /*for(int g=0; g"+lazosYdistancias[1]+" :"+lazosYdistancias[2]); ex.AddArc(lazosYdistancias[0], lazosYdistancias[1],lazosYdistancias[2]); //System.out.println("linea "+fil+"= "+lineas[0]+"->"+lineas[1]+" "+lineas[2]+" , "+lineas[3]+" , "+lineas[4]+" , "+lineas[5]+" )"; } ex.AfficheMatrice(); System.out.println(""; } /*if(obj1==button) { System.out.println("Los Caminos mas cortos son :"; final int [] pred = Dijkstra.djikstra(ex, 0,n); for (int naux = 0; naux < Integer.parseInt(text.getText()); naux++) { Dijkstra.AfficheChemin(ex,pred, 0, naux); r1=Dijkstra.setRes(); for (int j=Dijkstra.countRes; j>=0; j--) { if(j>0) { System.out.print("( "+r1+" , "+r1[j-1]+" )"; int s=searchLinea(r1,r1[j-1]); if(s>=0) { Graphics fig=getGraphics(); fig.setColor(Color.red); System.out.print(lineas[2]+" "+lineas[3]+" "+lineas[4]+" "+lineas[5]); fig.drawLine(lineas[2], lineas[3],lineas[4], lineas[5]); } System.out.println(""; } } System.out.println(""; } }*/ } } public class Clic2 implements ActionListener { public void actionPerformed(ActionEvent e) { JButton obj=(JButton)e.getSource(); if(obj==button) { System.out.println("Los Caminos mas cortos son :"; final int [] pred = Dijkstra.djikstra(ex, 0,n); for (int naux = 0; naux < Integer.parseInt(text.getText())+1; naux++) { Dijkstra.AfficheChemin(ex,pred, 0, naux); r1=Dijkstra.setRes(); for (int j=Dijkstra.countRes; j>=0; j--) { if(j>0) { //System.out.print("( "+r1+" , "+r1[j-1]+" )"; int s=searchLinea(r1,r1[j-1]); if(s>=0) { Graphics fig=getGraphics(); fig.setColor(Color.red); //System.out.print(lineas[2]+" "+lineas[3]+" "+lineas[4]+" "+lineas[5]); fig.drawLine(lineas[2], lineas[3],lineas[4], lineas[5]); } System.out.println(""; } } System.out.println(""; } } } } public class RatonListener implements MouseListener { public void mouseClicked(MouseEvent e) { Graphics fig=getGraphics(); //JLabel nombr+ int x,y,a=0,b=0; x=e.get); y=e.getY(); int x1, x2, x3, y1, y2, y3; // calcular flecha x1= (int)(x - 3*x + 6*y); x2= (int)(x - 3*x - 6*y); x3= (int)(x + 6*x); y1= (int)(y - 3*y - 6*x); y2= (int)(y - 3*y + 6*x); y3= (int)(y + 6*y); int flecha_x[] = { x1, x2, x3, x1 }; int flecha_y[] = { y1, y2, y3, y1 }; JTextField text = new JTextField(); String nom; if(opcion==1) { fig.setColor(Color.black); fig.drawString(Integer.toString(countNodos), x, y); fig.setColor(Color.yellow); fig.fillOval(x, y, 30,30); coordenadas[0]=x; coordenadas[1]=y; n++; countNodos++; } if(opcion==2) { //fig.drawLine(x, y,x+20, y); //e.getClickCount(); countNodos=0; //System.out.println(e.getClickCount()); clic++; //System.out.println(clic); if(clic==1) { cordx1=e.get); cordy1=e.getY(); } if(clic==2) { clic=0; fig.setColor(Color.black); fig.drawLine(cordx1, cordy1,x, y); JOptionPane.showMessageDialog(null,text, "Introduce la distancia", JOptionPane.INFORMATION_MESSAGE); fig.setColor(Color.blue); fig.drawString(text.getText(),(cordx1+x)/2 ,(cordy1+y)/2); //fig.fillPolygon(flecha_x, flecha_y, 3); //System.out.println("nuevas coordenadas union1 "+cordx1+" "+cordy1); clicNodo(cordx1,cordy1); //System.out.println("el nodo escontrado es "+nodoEncontrado); a=nodoEncontrado; //System.out.println("nuevas coordenasdas union2 "+x+" "+y); clicNodo(x,y); //System.out.println("el nodo escontrado es "+nodoEncontrado); b=nodoEncontrado; //System.out.println("lazos "+a+"->"+b+"distancias= "+Integer.parseInt(text.getText())); //System.out.println("el numero de lazos "+countLazos); lazosYdistancias[0]=a; lazosYdistancias[1]=b; lazosYdistancias[2]=Integer.parseInt(text.getText()); lineas[0]=a; lineas[1]=b; lineas[2]=cordx1; lineas[3]=cordy1; lineas[4]=x; lineas[5]=y; countLazos++; //System.out.println(cordx1+" "+cordy1); } } } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } public boolean clicNodo(int x1,int y1) { //System.out.println("si entro a buscar"; int xaux,yaux,ne1,ne2; ne1=0; xaux=0; ne2=0; yaux=0; System.out.println("n "+n); for (int i=0; i0)&&((x1-coordenadas[0])<31))&&(((y1-coordenadas[1])>0)&&((y1-coordenadas[1])<31))) { xaux=1; ne1=i; System.out.println("posible nodox"+ne1); } /*if(((y1-coordenadas[1])>0)&&((y1-coordenadas[1])<31)) { yaux++; ne2=i; System.out.println("posible nodoy"+ne2); }*/ } //if(((xaux==1)&&(yaux==1))&&(ne1==ne2)) if(xaux==1) { //System.out.println("posible nodo real"+ne1); nodoEncontrado=ne1; return true; } else { //System.out.println("posible nodo NO real"+ne1+" "+ne2); nodoEncontrado=100000; return false; } } public int searchLinea(int q, int w) { int a=-1; for(int i=0;i0) System.out.println(sommet + " la distancia de " +arc ); } } } public int [] ChercheVoisin(int node){ //construit un tableau des sommets adjacents d'un sommet count=0; for (int i = 0; i < arc.length; i++) { if (arc>0 ) {count ++; } } final int[]rep = new int ; count=0; for (int i = 0; i < arc.length; i++){ if(arc>0){rep[count++]=i;} } return rep; } } la tercera clase es ExtraireMin.java /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Ruta; /** * * @author paty */ public class ExtraireMin { public static int ExtraireMin(int [] distancecc, boolean [] marque){ int x =Integer.MAX_VALUE; int y=0; for (int i = 0; i < distancecc.length; i++) { if (!marque && distancecc< x) { y=i; x=distancecc; } } return y; } } la cuarta clase es Dijkstra.java /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Ruta; import java.util.LinkedList; /** * * @author paty */ public class Dijkstra { static int[] r; static int countRes; public static int [] djikstra (InputGraph IG, int Source,int num){ r=new int[20]; countRes=0; final int [] distancecc = new int [IG.GetSize()]; final int [] pred = new int [IG.GetSize()]; final boolean [] marque = new boolean [IG.GetSize()]; for (int i = 0; i < distancecc.length; i++) { distancecc=Integer.MAX_VALUE; } distancecc=0; for (int i = 0; i < distancecc.length; i++) { final int U= ExtraireMin.ExtraireMin (distancecc, marque); marque=true; final int [] V= IG.ChercheVoisin(U); for (int j = 0; j < V.length; j++) { final int NV = V ; final int d = distancecc + IG.GetPoids(U, NV); if (d < distancecc) { distancecc=d; pred=U; } } } return pred; } public static void AfficheChemin (InputGraph IG, int [] pred, int source, int n){ countRes=0; int u=0; LinkedList cheminpc =new LinkedList(); int x=n; String pass; //System.out.println("x "+x); //System.out.println("source "+source); while (x!=source){ pass=String.valueOf(IG.GetSommet(x)); //System.out.println("getsome "+pass); r=Integer.parseInt(pass); cheminpc.add(source, IG.GetSommet(x)+"=====>"; x=pred; u++; countRes++; //System.out.println("esto es la x "+x); System.out.println(cheminpc); } cheminpc.add(source, IG.GetSommet(source)+"=====>"; System.out.println(cheminpc); System.out.println("--------------------------------------------"; //System.out.println(cheminpc); } public static int[] setRes() { return r; } public static int setCountRes() { return countRes; } } y la ultima clase MainPrincipal1.java /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Ruta; /** * * @author paty */ public class MainPrincipal1 { public static void main(String[] args) { Menu1 men=new Menu1(); } }
Dijkstra en Java
Datos archivados del Taringa! original
10puntos
7,511visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
2visitas
0comentarios
Dar puntos: