예제 #1
0
        static void relax(Vertice u, Vertice v)
        {
            int distancia = u.get_distancia() + u.get_peso(v);

            if (v.get_distancia() > distancia)
            {
                v.set_distancia(distancia);
                v.set_vertice_caminho_anterior(u);
                //Console.WriteLine("Atualizei a distância " + distancia + " do vértice " + u.get_id()  + " para o vértice " + v.get_id());
            }
            else
            {
                //Console.WriteLine("NÃO atualizei a distância " + distancia + " do vértice " + u.get_id() + " para o vértice " + v.get_id());
            }
        }
예제 #2
0
        static Vertice extract_min(SortedDictionary <int, Vertice> Q)
        {
            var     key = Q.Keys.ToList()[0];
            Vertice min = Q[key];

            foreach (KeyValuePair <int, Vertice> v in Q)
            {
                if (v.Value.get_distancia() < min.get_distancia())
                {
                    min = v.Value;
                }
            }
            Q.Remove(min.get_id());
            return(min);
        }