public void calculaCaminoMasCorto(CNodoVertice origen) { List <CNodoVertice> S = new List <CNodoVertice>(); List <CNodoVertice> P = new List <CNodoVertice>(); List <CNodoVertice> VS; int[] D = new int[n]; S.Add(origen); for (int i = 0; i < n; i++) { D[i] = C[V.IndexOf(origen), i]; P.Add(origen); } for (int j = 0; j < n - 1; j++) { VS = VminusS(S); CNodoVertice w = menorVminusS(D, VS); S.Add(w); VS = VminusS(S); foreach (CNodoVertice cnv in VS) { if (G.sonVerticesAdyacentes(cnv.getVertice(), w.getVertice())) { int aux = D[V.IndexOf(cnv)]; if (C[V.IndexOf(w), V.IndexOf(cnv)] == INFINITO) { C[V.IndexOf(w), V.IndexOf(cnv)] -= D[V.IndexOf(w)]; } D[V.IndexOf(cnv)] = minimoDe(D[V.IndexOf(cnv)], D[V.IndexOf(w)] + C[V.IndexOf(w), V.IndexOf(cnv)]); if (aux != D[V.IndexOf(cnv)]) { P[V.IndexOf(cnv)] = w; } } } } muestraResultado(D, P, origen); }