sábado, 29 de noviembre de 2014

Programando en C#: Ruta mas Corta - Algoritmo Dijkstra

Ruta mas Corta - Algoritmo Dijkstra

En las últimas clases que he tenido, en la asignatura de investigación de operaciones, he estado viendo ejercicios acerca de redes, ¿como resolver?, representación de actividades por medio de redes, determinar la ruta mas corta.
En las clases hemos determinado la ruta mas corta mediante el Algoritmo de Dijkstra, pero ahora el profesor nos ha hacerlo con una aplicación informática... He estado buscando por la web, si alguien mas lo ha hecho, pero no lo encontré, así que termine haciéndolo por mi cuenta...

La aplicación la he hecho usando el lenguaje C#.

Código

Para realizar la aplicación, he usado matrices y jugando con las filas y columnas se ha logrado obtener buenos resultados.
He divido el programa en tres clases, la primera es SolucionDijkstra que contiene la lógica, la clase Paso que contiene los detalles de cada resultado y la clase frmSolucion que contiene la interfaz.


Comenzaremos con el objeto Paso que contienen los datos de cada resultado de la matriz solución:

public class Paso {
          public decimal distancia;
          public int origen;
          public int nodoOrigen;
          public int destino;
          public bool seleccionado;
         
          public Paso(decimal dis, int ori,int des,int nodoOri, bool sel)
         {
              distancia = dis;
              origen = ori;
              destino = des;
              seleccionado = sel;
              nodoOrigen = nodoOri;
          }
}


A continuación se detalla la clase 

La clase Paso, contiene los datos de los resultados

Luego de eso, he desarrollado un algoritmo un poco difícil de entender, y lo he colocado dentro del método Solucionar y se los detallaré por partes:

Método "llenarMatriz"
Este método nos servirá, para establecer el valor del nodo destino
Como vemos esto nos servirá cuando determinemos la menos distancia de cada fila, y obtener a partir del objeto el valor del nodo destino.

Método "solucionar"
Este es el método principal para la solucionar el algoritmo. 
Nota: Es recomendable definir las variables a usar dentro de las estructuras repetitivas fuera de las mismas.



Luego procedemos a establecer en la matriz de solución el nodo de origen, lo cual se realizará ca vez que inicie una nueva columna.




2 comentarios:

  1. Hola, Estoy tratando de comprender este algoritmo y el tuyo se ve muy fácil de entender y lo estuve probando pero al parecer está incompleto, falta bastante código, donde se usa la matriz adyacente o donde se establece el nodo destino para realizar el cálculo entre otras.

    ResponderBorrar