⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 Easy implementation of PRIM and DIJKSTRA algorims for graph sorting. It also permit comparison of ti
💻 JAVA
字号:
import java.io.FileOutputStream;

import javax.swing.JOptionPane;
import javax.swing.UIManager;

public class Main {

  public static void main(String [] args) throws Exception {
  	try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception Ex) {}
    while(true) {
    	String[] Opciones = {"Dijkstra", "Floyd", "Test de todos los algoritmos"};
    	String s = (String)JOptionPane.showInputDialog(null, "Elige un algoritmo para probar:", "Menu principal", JOptionPane.QUESTION_MESSAGE, null, Opciones, Opciones[0]);
    	if((s != null) && (s.length() > 0)) {
        if(s.compareTo(Opciones[0]) == 0) Dijkstra();
        if(s.compareTo(Opciones[1]) == 0) Floyd();
        if(s.compareTo(Opciones[2]) == 0) Test();
    	} else return;
    }
  }
  
  static private void Dijkstra() {
  	String[] TipoAlmacenamiento = {"Array de listas enlazadas", "Matriz de adyacencias"};
  	String Almacenamiento = (String)JOptionPane.showInputDialog(null, "Elige un tipo de implementacion para el grafo:", "Algoritmo de Dijkstra", JOptionPane.QUESTION_MESSAGE, null, TipoAlmacenamiento, TipoAlmacenamiento[0]);

  	String[] TipoOrigen = {"Archivo 'Kruskal.txt'", "Generar grafo aleatorio"};
    int Origen = JOptionPane.showOptionDialog(null, "Elige un origen de datos para el algoritmo.", "Algoritmo de Dijkstra", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, TipoOrigen, TipoOrigen[0]);
    
    Grafo EstructuraGrafo = null;
  	if(Origen == JOptionPane.YES_OPTION) { //Origen es Archivo
      int Vertices = Grafo.VerticesArchivo("Dijkstra.txt");
      if(Almacenamiento.compareTo(TipoAlmacenamiento[0]) == 0)
      	EstructuraGrafo = new GrafoLista(Vertices, false);
      else
      	EstructuraGrafo = new GrafoMatriz(Vertices, false);
      EstructuraGrafo.LoadFromFile("Dijkstra.txt");
    } else {															 //Origen es aleatorio
      int NumVertices = Integer.parseInt(JOptionPane.showInputDialog(null, "Numero de vertices del grafo:", "Algoritmo de Dijkstra", JOptionPane.QUESTION_MESSAGE));
      int NumAristas  = Integer.parseInt(JOptionPane.showInputDialog(null, "Numero de aristas del grafo:", "Algoritmo de Dijkstra", JOptionPane.QUESTION_MESSAGE));
      if(Almacenamiento.compareTo(TipoAlmacenamiento[0]) == 0)
      	EstructuraGrafo = new GrafoLista(NumVertices, false);
      else
      	EstructuraGrafo = new GrafoMatriz(NumVertices, false);
      EstructuraGrafo.GenerateRandom(NumAristas);
    }
  	Dijkstra AlgoritmoDijkstra = new Dijkstra();
  	Dijkstra.DijkstraResult G;
   	String[] TipoAlg = {"Usando un monticulo", "Usando una lista"};
    int Alg = JOptionPane.showOptionDialog(null, "Elige el algoritmo a ejecutar", "Algoritmo de Dijkstra", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, TipoAlg, TipoAlg[0]);

  	long Time = System.nanoTime();
    if(Alg == 0)   	
  	  G = AlgoritmoDijkstra.DijkstraHeap(EstructuraGrafo);
    else
    	G = AlgoritmoDijkstra.DijkstraList(EstructuraGrafo);
    double TotalTime = (System.nanoTime() - Time) / 1000000.0;

    String[] TipoDestino = {"Guardar resultado en 'Dijkstra.out'", "Descartar"};
    int Destino = JOptionPane.showOptionDialog(null, "El tiempo necesario para ejecutar el algoritmo ha sido de " + Double.toString(TotalTime) + "mS.\n縌ue desea hacer con los resultados?", "Algoritmo de Dijkstra", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, TipoDestino, TipoDestino[0]);
    if(Destino == JOptionPane.YES_OPTION) G.SaveToFile("Dijkstra.out");
  }

  static private void Floyd() {
  	String[] TipoAlmacenamiento = {"Array de listas enlazadas", "Matriz de adyacencias"};
  	String Almacenamiento = (String)JOptionPane.showInputDialog(null, "Elige un tipo de implementacion para el grafo:", "Algoritmo de Floyd", JOptionPane.QUESTION_MESSAGE, null, TipoAlmacenamiento, TipoAlmacenamiento[0]);

  	String[] TipoOrigen = {"Archivo 'Floyd.txt'", "Generar grafo aleatorio"};
    int Origen = JOptionPane.showOptionDialog(null, "Elige un origen de datos para el algoritmo.", "Algoritmo de Floyd", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, TipoOrigen, TipoOrigen[0]);
    
    Grafo EstructuraGrafo = null;
  	if(Origen == JOptionPane.YES_OPTION) { //Origen es Archivo
      int Vertices = Grafo.VerticesArchivo("Floyd.txt");
      if(Almacenamiento.compareTo(TipoAlmacenamiento[0]) == 0)
      	EstructuraGrafo = new GrafoLista(Vertices, false);
      else
      	EstructuraGrafo = new GrafoMatriz(Vertices, false);
      EstructuraGrafo.LoadFromFile("Floyd.txt");
    } else {															 //Origen es aleatorio
      int NumVertices = Integer.parseInt(JOptionPane.showInputDialog(null, "Numero de vertices del grafo:", "Algoritmo de Floyd", JOptionPane.QUESTION_MESSAGE));
      int NumAristas  = Integer.parseInt(JOptionPane.showInputDialog(null, "Numero de aristas del grafo:", "Algoritmo de Floyd", JOptionPane.QUESTION_MESSAGE));
      if(Almacenamiento.compareTo(TipoAlmacenamiento[0]) == 0)
      	EstructuraGrafo = new GrafoLista(NumVertices, false);
      else
      	EstructuraGrafo = new GrafoMatriz(NumVertices, false);
      EstructuraGrafo.GenerateRandom(NumAristas);
    }

  	Floyd AlgoritmoFloyd = new Floyd();
  	Floyd.FloydResult FResult;
  	long Time = System.nanoTime();
  	FResult = AlgoritmoFloyd.AlgFloyd(EstructuraGrafo);
    double TotalTime = (System.nanoTime() - Time) / 1000000.0;

    String[] TipoDestino = {"Guardar resultado en 'Floyd.out'", "Descartar"};
    int Destino = JOptionPane.showOptionDialog(null, "El tiempo necesario para ejecutar el algoritmo ha sido de " + Double.toString(TotalTime) + "mS.\n縌ue desea hacer con los resultados?", "Algoritmo de Floyd", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, TipoDestino, TipoDestino[0]);
    if(Destino == JOptionPane.YES_OPTION) FResult.SaveToFile("Floyd.out");
  }
  
  static private void Test() {
    double Intento;
    double Progreso = 0.0;
		try {
			FileOutputStream DijkstraLista_Lista  = new FileOutputStream("Dijkstra_Lista_Lista.txt");
			FileOutputStream DijkstraLista_Matriz = new FileOutputStream("Dijkstra_Lista_Matriz.txt");
			FileOutputStream DijkstraHeap_Lista   = new FileOutputStream("Dijkstra_Heap_Lista.txt");
			FileOutputStream DijkstraHeap_Matriz  = new FileOutputStream("Dijkstra_Heap_Matriz.txt");

			FileOutputStream Floyd_Lista   = new FileOutputStream("Floyd_Lista.txt");
			FileOutputStream Floyd_Matriz  = new FileOutputStream("Floyd_Matriz.txt");
			
			DijkstraLista_Lista.write(String.format("Algoritmo: DIJKSTRA_Lista - Almacenamiento: Lista de Adyacencias\r\n").getBytes());
			DijkstraLista_Matriz.write(String.format("Algoritmo: DIJKSTRA_Lista - Almacenamiento: Matriz de Adyacencias\r\n").getBytes());
			DijkstraHeap_Lista.write(String.format("Algoritmo: DIJKSTRA_Heap - Almacenamiento: Lista de Adyacencias\r\n").getBytes());
			DijkstraHeap_Matriz.write(String.format("Algoritmo: DIJKSTRA_Heap - Almacenamiento: Matriz de Adyacencias\r\n").getBytes());
			Floyd_Lista.write(String.format("Algoritmo: FLOYD - Almacenamiento: Lista de Adyacencias\r\n").getBytes());
			Floyd_Matriz.write(String.format("Algoritmo: FLOYD - Almacenamiento: Matriz de Adyacencias\r\n").getBytes());

			DijkstraLista_Lista.write(String.format("Columnas: N

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -