Beispiel #1
0
        private Arista seleccion(ListaAristas candidatos, string subGrafo)
        {
            Arista aux    = new Arista();
            int    indice = new int();

            for (int i = 0; i < candidatos.Count; i++)
            {
                if (subGrafo.Contains(candidatos[i].Origen))//si la cadena subgrafo contiene el origen pero no el destino se utiliza
                {
                    if (!subGrafo.Contains(candidatos[i].getDestino()))
                    {
                        indice = i;
                        aux    = candidatos[i];
                        break;
                    }
                }
                else
                {
                    if (subGrafo.Contains(candidatos[i].getDestino()))
                    {
                        indice = i;
                        aux    = candidatos[i];
                        break;
                    }
                }
            }
            candidatos.RemoveAt(indice);
            return(aux);
        }
Beispiel #2
0
        public Grafo kruskal()
        {
            Grafo        prometedor = new Grafo();
            ListaAristas candidatos = new ListaAristas();

            nodosKruskal = new ListaAristas();
            List <string> compConex = new List <string>();

            for (int i = 0; i < this.Count; i++)
            {
                for (int j = 0; j < this[i].getListAristas().Count; j++)
                {
                    candidatos.Add(this[i].getListAristas()[j]);
                }
            }
            for (int i = 0; i < this.Count; i++)
            {
                compConex.Add(Convert.ToString(this[i].getOrigen()));
            }
            quickSort(ref candidatos, 0, candidatos.Count - 1);
            int c1 = new int();
            int c2 = new int();

            for (int contador = 0; prometedor.getListaKruskal().Count < this.Count - 1; contador++)
            {
                Vertice u = new Vertice(candidatos[contador].Origen, buscaNodoX(candidatos[contador].Origen), buscaNodoY(candidatos[contador].Origen));
                Vertice v = new Vertice(candidatos[contador].getDestino(), buscaNodoX(candidatos[contador].getDestino()), buscaNodoY(candidatos[contador].getDestino()));
                //**Seleccion
                Arista a = new Arista(u.getOrigen(), v.getOrigen(), candidatos[contador].Peso, buscaNodoX(v.getOrigen()), buscaNodoY(v.getOrigen()));
                c1 = buscaKruskal(u.getOrigen(), compConex);
                c2 = buscaKruskal(v.getOrigen(), compConex);
                if (c1 != c2)
                {
                    int indicePrometedor = prometedor.contiene(u.getOrigen());
                    if (indicePrometedor != -1)
                    {
                        prometedor[indicePrometedor].getListAristas().Add(a);
                    }
                    else
                    {
                        u.getListAristas().Add(a);
                        prometedor.Add(u);
                    }

                    if (prometedor.contiene(v.getOrigen()) == -1)
                    {
                        prometedor.Add(v);
                    }
                    //Fusion
                    compConex[c1] += compConex[c2];
                    compConex.RemoveAt(c2);
                    prometedor.getListaKruskal().Add(a);
                }
            }
            return(prometedor);
        }
        public Vertice(char o, char d)
        {
            origen = o;
            listaA = new ListaAristas();

            Arista a = new Arista(o, d);

            listaA.Add(a);
            x = new int();
            y = new int();
        }
Beispiel #4
0
        public Grafo(ListaVuelos listaV, char b)
        {
            List <char> listaC = new List <char>();

            nodosKruskal = new ListaAristas();
            cantAristas  = new int();
            int x = new int();
            int y = new int();

            for (int i = 0; i < listaV.Count; i++)
            {
                if (!listaC.Contains((listaV[i].getOrigen())))
                {
                    listaC.Add(listaV[i].getOrigen());
                }
                if (!listaC.Contains((listaV[i].getDestino())))
                {
                    listaC.Add(listaV[i].getDestino());
                }
            }
            for (int i = 0; i < listaC.Count; i++)
            {
                ListaAristas listaA = new ListaAristas();
                for (int j = 0; j < listaV.Count; j++)
                {
                    if (listaC[i] == listaV[j].getOrigen())
                    {
                        for (int k = 0; k < this.Count; k++)
                        {
                            if (this[k].getOrigen() == listaV[j].getDestino())
                            {
                                x = this[k].X;
                                y = this[k].Y;
                            }
                        }
                        Arista a = new Arista(listaC[i], listaV[j].getDestino(), listaV[j].getTiempo(), x, y);
                        listaA.Add(a);
                        cantAristas++;
                    }
                }

                Vertice v = new Vertice(listaC[i], listaA);
                this.Add(v);
            }
        }
Beispiel #5
0
        public Grafo prim()
        {
            string       subGrafo   = "";
            Grafo        prometedor = new Grafo();
            ListaAristas candidatos = new ListaAristas();

            for (int i = 0; i < this.Count; i++)
            {
                for (int j = 0; j < this[i].getListAristas().Count; j++)
                {
                    candidatos.Add(this[i].getListAristas()[j]);
                }
            }
            quickSort(ref candidatos, 0, candidatos.Count - 1);

            subGrafo = candidatos[0].Origen.ToString();
            prometedor.Add(new Vertice(candidatos[0].Origen, buscaNodoX(candidatos[0].Origen), buscaNodoY(candidatos[0].Origen)));
            int numCandidatos = candidatos.Count;

            for (int i = 0; i < numCandidatos && prometedor.Count != this.Count; i++)
            {
                Vertice origen, destino;

                Arista a = seleccion(candidatos, subGrafo);
                prometedor.getListaKruskal().Add(a);
                if (subGrafo.Contains(a.Origen))
                {
                    subGrafo += a.getDestino();
                    destino   = new Vertice(a.getDestino(), buscaNodoX(a.getDestino()), buscaNodoY(a.getDestino()));
                    prometedor.Add(destino);
                    prometedor[prometedor.contiene(a.Origen)].getListAristas().Add(a);
                }
                else if (subGrafo.Contains(a.getDestino()))
                {
                    subGrafo += a.Origen;
                    origen    = new Vertice(a.Origen, buscaNodoX(a.Origen), buscaNodoY(a.Origen));
                    origen.getListAristas().Add(a);
                    prometedor.Add(origen);
                }
            }

            return(prometedor);
        }
Beispiel #6
0
        private void buttonAgregar_Click(object sender, EventArgs e)
        {
            bool duplicado = false;
            bool origenExisteEnGrafo, destinoExisteEnGrafo;

            origenExisteEnGrafo = destinoExisteEnGrafo = false;

            Vuelo vuelo = new Vuelo(Convert.ToChar(textBoxOrigen.Text), Convert.ToChar(textBoxDestino.Text),
                                    Int32.Parse(textBoxTiempo.Text), Int32.Parse(textBoxCosto.Text), dateTimePickerFechaSalida.Value);

            Arista arista1;
            int    i, k;

            for (i = 0; i < listVuelos.Count; i++)
            {
                if (vuelo.getOrigen() == listVuelos[i].getOrigen() && vuelo.getDestino() == listVuelos[i].getDestino())
                {
                    duplicado = true;
                }
            }
            //**********
            if (!duplicado)
            {
                FormGrafo ventanaGrafo = new FormGrafo(grafoVuelos, true);

                Vertice vertice;

                for (i = 0; i < grafoVuelos.Count; i++)
                {
                    if (grafoVuelos[i].getOrigen() == Convert.ToChar(textBoxOrigen.Text))
                    {
                        origenExisteEnGrafo = true;
                        break;
                    }
                }

                for (k = 0; k < grafoVuelos.Count; k++)
                {
                    if (grafoVuelos[k].getOrigen() == Convert.ToChar(textBoxDestino.Text))
                    {
                        destinoExisteEnGrafo = true;
                        break;
                    }
                }

                if (origenExisteEnGrafo && destinoExisteEnGrafo)
                {
                    arista1 = new Arista(grafoVuelos[i].getOrigen(), grafoVuelos[k].getOrigen(), vuelo.getCosto(), grafoVuelos[k].X, grafoVuelos[k].Y);
                    grafoVuelos[i].getListAristas().Add(arista1);
                }

                else if (!origenExisteEnGrafo && destinoExisteEnGrafo)
                {
                    arista1 = new Arista(vuelo.getOrigen(), grafoVuelos[k].getOrigen(), vuelo.getCosto(), grafoVuelos[k].X, grafoVuelos[k].Y);
                    ventanaGrafo.ShowDialog();
                    vertice = new Vertice(Convert.ToChar(textBoxOrigen.Text), ventanaGrafo.getX(), ventanaGrafo.getY());
                    vertice.getListAristas().Add(arista1);
                    grafoVuelos.Add(vertice);
                }

                else if (origenExisteEnGrafo && !destinoExisteEnGrafo)
                {
                    ventanaGrafo.ShowDialog();
                    vertice = new Vertice(Convert.ToChar(textBoxDestino.Text), ventanaGrafo.getX(), ventanaGrafo.getY());
                    grafoVuelos.Add(vertice);
                    arista1 = new Arista(grafoVuelos[i].getOrigen(), vertice.getOrigen(), vuelo.getCosto(), vertice.X, vertice.Y);
                    grafoVuelos[i].getListAristas().Add(arista1);
                }

                else if (!origenExisteEnGrafo && !destinoExisteEnGrafo)
                {
                    Vertice vertice2;
                    ventanaGrafo.ShowDialog();
                    vertice = new Vertice(vuelo.getOrigen(), ventanaGrafo.getX(), ventanaGrafo.getY());
                    ventanaGrafo.ShowDialog();
                    vertice2 = new Vertice(vuelo.getDestino(), ventanaGrafo.getX(), ventanaGrafo.getY());

                    arista1 = new Arista(vertice.getOrigen(), vertice2.getOrigen(), vuelo.getCosto(), vertice2.X, vertice2.Y);
                    vertice.getListAristas().Add(arista1);
                    grafoVuelos.Add(vertice);
                    grafoVuelos.Add(vertice2);
                }
                listVuelos.Add(vuelo);
            }
            //*************

            actualizarListViewVuelos();
        }