public void Dijkstra(int pNodoOrigen, int pNodoDestino) { if (nodoDestino == -1 || nodoOrigen == -1) { return; } Path = new List <int>(); List <int> ComollegoA = new List <int>(); MinHeap ColaPendiente = new MinHeap(); List <double> Distancias = new List <double>(); for (int i = 0; i < myGrafo.Count; i++) { ComollegoA.Add(-1); } for (int i = 0; i < myGrafo.Count; i++) { Distancias.Add(INFINITO); } Distancias[pNodoOrigen] = 0; Arista a = new Arista(); a.indexDestino = pNodoDestino; /*a.indexOrigen = nodoOrigen;*/ a.peso = Distancias[pNodoOrigen]; ColaPendiente.Add(new Arista { peso = Distancias[pNodoOrigen], indexDestino = pNodoDestino }); //Mete el primero el cual se le asigna una distancia 0 while (ColaPendiente.Count > 0) { Arista tempNodo = ColaPendiente.RemoveMin(); //POP(); if (pNodoDestino == tempNodo.indexDestino) { break; //si es que nodo temp que estoy recorriendo llega a ser igual que el nodo destino significa que lo encontro(minimamente) } for (int i = 0; i < myGrafo[tempNodo.indexDestino].Count; i++) { Arista auxNodo = paraderos[tempNodo.indexDestino].conexiones[i]; //PARTTE DEL RELAX - auxNodo.first ES EL PEDACITO if ((Distancias[tempNodo.indexDestino] + auxNodo.peso) < Distancias[auxNodo.indexDestino]) { Distancias[auxNodo.indexDestino] = Distancias[tempNodo.indexDestino] + auxNodo.peso; ColaPendiente.Add(new Arista { peso = Distancias[auxNodo.indexDestino], indexDestino = auxNodo.indexDestino }); //LO AGREGO A LA COLITA DE PEND (NO SE QUEDARA VACIO) ComollegoA[auxNodo.indexDestino] = tempNodo.indexDestino; //el tempNodo es el que reviso todos sus aristas tonce por ese medio llefo a aUxNODO } } } double DistanciaFinal = Distancias[pNodoDestino]; List <int> Pasos = new List <int>(); Pasos.Add(pNodoDestino); while (ComollegoA[pNodoDestino] != -1) //paso del vector de como llego a a un veector de pasos y lo revierto para tener el camino { Pasos.Add(ComollegoA[pNodoDestino]); pNodoDestino = ComollegoA[pNodoDestino]; } Pasos.Reverse(); //reverse(Pasos.begin(),Pasos.end()); //Tuple<List<int>, int> par = new Tuple<List<int>, int>(Pasos,DistanciaFinal); //return par; Path = Pasos; }