예제 #1
0
        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);
        }