Beispiel #1
0
        public static List <dynamic> Dijkstra(Grafoh g, Vertice s)
        {
            SortedDictionary <int, Vertice> Q = new SortedDictionary <int, Vertice>();
            List <dynamic> livros             = new List <dynamic>();

            initialize_single_source(g, s);

            Q = g.get_vertices();

            SortedDictionary <int, Vertice> S = new SortedDictionary <int, Vertice>();

            while (Q.Count > 0)
            {
                Vertice u = extract_min(Q);

                u.set_visitado(true);

                foreach (KeyValuePair <Vertice, int> v in u.get_adjacentes())
                {
                    if (v.Key.get_visitado() == true)
                    {
                        continue;
                    }
                    relax(u, v.Key);
                }
                add_S(u, S);
                livros.Add(u);
                // Console.Write(u.get_id() + ",");
            }

            /* S tem os pesos finais de caminho mínimos a partir da fonte determinada, assim atualiza o grafo
             * com os vértices atualizados*/
            g.set_vertices(S);
            return(livros);
        }
Beispiel #2
0
 static void initialize_single_source(Grafoh g, Vertice s)
 {
     foreach (KeyValuePair <int, Vertice> v in g.get_vertices())
     {
         v.Value.set_distancia(int.MaxValue);
     }
     s.set_distancia(0);
 }
Beispiel #3
0
        public List <dynamic> inicializagrafo(int Id_Livro_Pesquisado)
        {
            List <dynamic> result = new List <dynamic>();
            Grafoh         g      = new Grafoh(true);
            Vertice        origem;



            var            livros     = from l in db.livros select new { l.ID_Livro, l.Classificacao_Indicativa, l.Categoria };
            List <dynamic> livrosDois = new List <dynamic>();

            foreach (dynamic livro in livros)
            {
                g.inserir_vertice(livro.ID_Livro);
                livrosDois.Add(livro);
            }


            foreach (dynamic livro1 in livros)
            {
                foreach (dynamic livro2 in livrosDois)
                {
                    if (livro1.Categoria == livro2.Categoria)
                    {
                        //if (livro1.Classificacao_Indicativa == "L" || livro2.Classificacao_Indicativa == "L")
                        //{
                        //    livro1.Classificacao_Indicativa = 0;
                        //    livro2.Classificacao_Indicativa = 0;
                        //}
                        if (livro1.Classificacao_Indicativa > livro2.Classificacao_Indicativa)
                        {
                            g.inserir_aresta(livro1.ID_Livro, livro2.ID_Livro, (livro1.Classificacao_Indicativa - livro2.Classificacao_Indicativa));
                        }
                        else
                        {
                            g.inserir_aresta(livro1.ID_Livro, livro2.ID_Livro, (livro2.Classificacao_Indicativa - livro1.Classificacao_Indicativa));
                        }
                    }
                }
            }
            result = new List <dynamic>();


            origem = g.get_vertice(Id_Livro_Pesquisado);

            result = Dijkstra(g, g.get_vertice(Id_Livro_Pesquisado));
            return(result);
        }