📄 main.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 + -