Example #1
0
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            int    grau    = 0;
            String Vertice = cbxVertice.SelectedItem.ToString();

            int        vertice    = clsGrafo.getVertices().IndexOf(new clsVertice(Vertice));
            clsVertice clsVertice = clsGrafo.getVertices()[vertice];

            grau = clsVertice.getArestas().Count();


            foreach (clsVertice Item in clsGrafo.getVertices())
            {
                grau += Item.getArestas().Contains(clsVertice) ? 1 : 0;
            }

            MessageBox.Show(String.Format("O grau do vértice é {0}", grau.ToString()));
        }
Example #2
0
        private void btnVerificaAresta_Click(object sender, EventArgs e)
        {
            String msg = String.Empty;

            String VerticeInicial = cbxVerticeInicial.SelectedItem.ToString();
            String VerticeFinal   = cbxVerticeFinal.SelectedItem.ToString();

            //Buscando os objetos correspondentes ao nome da vértice
            int inicial = clsGrafo.getVertices().IndexOf(new clsVertice(VerticeInicial));
            int final   = clsGrafo.getVertices().IndexOf(new clsVertice(VerticeFinal));

            clsVertice VInicial = clsGrafo.getVertices()[inicial];
            clsVertice VFinal   = clsGrafo.getVertices()[final];

            msg = ((VInicial.getArestas().Contains(VFinal)) || (VFinal.getArestas().Contains(VInicial))) ? "Existe uma aresta ligando os dois vértices" : "Não existe uma aresta ligando os dois vértices";

            MessageBox.Show(msg);
        }
Example #3
0
        static void Main(string[] args)
        {
            //Inicializacion de Variables
            int    alpha    = 1;
            int    betha    = 5;
            int    Q        = 100;
            int    N        = 30;
            int    G        = 10;
            double p        = 0.5;
            double FInicial = 0.000001;
            Random Rand     = new Random();

            //Inicializacion del Grafo
            clsGrafo Grafo = new clsGrafo("1", "4");

            clsVertice V = new clsVertice("1");

            V.Aristas.Add(new clsArista("1", "2", 5, FInicial));
            V.Aristas.Add(new clsArista("1", "3", 3.1, FInicial));
            V.Aristas.Add(new clsArista("1", "6", 5.2, FInicial));
            Grafo.Vertices.Add(V);

            V = new clsVertice("2");
            V.Aristas.Add(new clsArista("2", "1", 5, FInicial));
            V.Aristas.Add(new clsArista("2", "3", 4.9, FInicial));
            V.Aristas.Add(new clsArista("2", "7", 5.2, FInicial));
            Grafo.Vertices.Add(V);

            V = new clsVertice("3");
            V.Aristas.Add(new clsArista("3", "1", 3.1, FInicial));
            V.Aristas.Add(new clsArista("3", "2", 4.9, FInicial));
            V.Aristas.Add(new clsArista("3", "5", 6, FInicial));
            V.Aristas.Add(new clsArista("3", "6", 3.2, FInicial));
            V.Aristas.Add(new clsArista("3", "7", 3, FInicial));
            Grafo.Vertices.Add(V);

            V = new clsVertice("4");
            V.Aristas.Add(new clsArista("4", "5", 4.8, FInicial));
            V.Aristas.Add(new clsArista("4", "7", 5.5, FInicial));
            Grafo.Vertices.Add(V);

            V = new clsVertice("5");
            V.Aristas.Add(new clsArista("5", "3", 6, FInicial));
            V.Aristas.Add(new clsArista("5", "4", 5.5, FInicial));
            V.Aristas.Add(new clsArista("5", "6", 4.7, FInicial));
            Grafo.Vertices.Add(V);

            V = new clsVertice("6");
            V.Aristas.Add(new clsArista("6", "1", 5.2, FInicial));
            V.Aristas.Add(new clsArista("6", "3", 3.2, FInicial));
            V.Aristas.Add(new clsArista("6", "5", 4.7, FInicial));
            Grafo.Vertices.Add(V);

            V = new clsVertice("7");
            V.Aristas.Add(new clsArista("7", "2", 5.2, FInicial));
            V.Aristas.Add(new clsArista("7", "3", 3, FInicial));
            V.Aristas.Add(new clsArista("7", "4", 4.8, FInicial));
            Grafo.Vertices.Add(V);

            List <clsHormiga> Hormigas;
            string            Recorrido;

            for (int i = 0; i < G; i++)
            {
                Hormigas = new List <clsHormiga>();

                for (int j = 0; j < N; j++)
                {
                    clsHormiga H = new clsHormiga();
                    clsVertice VerticeAnterior = new clsVertice("");
                    clsVertice VerticeActual   = Grafo.getInicio();
                    double     RecorridoCosto  = 0;
                    Recorrido = VerticeActual.Origen;

                    while (!Grafo.isFinal(VerticeActual))
                    {
                        //Seleccion por Ruleta
                        double    Sum          = 0;
                        double    R            = Rand.NextDouble();
                        int       Len          = VerticeActual.Aristas.Count;
                        clsArista Camino       = null;
                        double    CostoVertice = 0;

                        foreach (clsArista A in VerticeActual.Aristas)
                        {
                            if (VerticeAnterior.Origen == A.Destino)
                            {
                                continue;
                            }

                            CostoVertice += (Math.Pow(A.Feromona, alpha) / Math.Pow(A.Costo, betha));
                        }

                        foreach (clsArista A in VerticeActual.Aristas)
                        {
                            if (VerticeAnterior.Origen == A.Destino)
                            {
                                continue;
                            }

                            Sum += (Math.Pow(A.Feromona, alpha) / Math.Pow(A.Costo, betha)) / CostoVertice;

                            if (Sum >= R)
                            {
                                Camino = A;
                                break;
                            }
                        }

                        if (Camino == null)
                        {
                            if (VerticeActual.Aristas[Len - 1].Origen == VerticeAnterior.Origen)
                            {
                                Len--;
                            }

                            Camino = VerticeActual.Aristas[Len - 1];
                        }

                        //Asigna Siguiente Vertice
                        VerticeAnterior = VerticeActual;
                        VerticeActual   = Grafo.findVertice(Camino.Destino);
                        Recorrido      += " - " + VerticeActual.Origen;
                        RecorridoCosto += Camino.Costo;
                        H.Visitados.Add(Camino);
                    }

                    //Fin Recorrido de Hormiga
                    H.RecorridoTotal = RecorridoCosto;
                    Console.WriteLine("G: " + i + " N: " + j + " Recorrido: " + Recorrido);
                    Hormigas.Add(H);
                }

                //Deposito de Feromona
                foreach (clsVertice VG in Grafo.Vertices)
                {
                    foreach (clsArista A in VG.Aristas)
                    {
                        double Sum = 0;
                        foreach (clsHormiga H in Hormigas)
                        {
                            foreach (clsArista AH in H.Visitados)
                            {
                                if (A.Origen == AH.Origen && A.Destino == AH.Destino)
                                {
                                    Sum += Q / H.RecorridoTotal;
                                    break;
                                }
                            }
                        }

                        A.Feromona = ((1 - p) * A.Feromona) + Sum;
                    }
                }
            }
            Console.ReadKey();
        }