예제 #1
0
        public void actualiza(DijkstraElementos elemento)
        {
            Nodo auxn = g.returnodo(elemento.actual);

            foreach (Adyacencia a in auxn.La)
            {
                for (int i = 0; i < listaDikstra.Count; i++)
                {
                    if (a.getNodoAd().getCiudad().GetNombreCiudadString() == listaDikstra[i].actual && listaDikstra[i].definitivo == false)
                    {
                        if (radioButtonCOSTO.Checked == true)
                        {
                            //Console.WriteLine(" entro costo");
                            if (a.getPesoAdy() + elemento.distancia < listaDikstra[i].distancia)
                            {
                                listaDikstra[i].proveniente = elemento.actual;
                                //compara[i].definitiva = true;
                                listaDikstra[i].distancia = a.getPesoAdy() + elemento.distancia;
                            }
                        }
                        if (radioButtonTiempo.Checked == true)
                        {
                            //Console.WriteLine(" entro time");
                            if (a.getTiempoAdy() + elemento.distancia < listaDikstra[i].distancia)
                            {
                                listaDikstra[i].proveniente = elemento.actual;
                                //compara[i].definitiva = true;
                                listaDikstra[i].distancia = a.getTiempoAdy() + elemento.distancia;
                            }
                        }
                    }
                }
            }
        }
예제 #2
0
        public void actualiza(DijkstraElementos elemento)
        {
            Nodo auxn = g.returnodo(elemento.actual);

            foreach (Adyacencia a in auxn.La)
            {
                for (int i = 0; i < listaDikstra.Count; i++)
                {
                    if (a.getNodoAd().getCiudad().GetNombreCiudadString() == listaDikstra[i].actual && listaDikstra[i].definitivo == false)
                    {
                        if (a.getPesoAdy() + elemento.distancia < listaDikstra[i].distancia)
                        {
                            listaDikstra[i].proveniente = elemento.actual;
                            //compara[i].definitiva = true;
                            listaDikstra[i].distancia = a.getPesoAdy() + elemento.distancia;
                        }
                    }
                }
            }
        }
예제 #3
0
        private void buttonCotizar_Click(object sender, EventArgs e)
        {
            ReiniciarTodo();
            textBoxTotal.Clear();
            listViewRutAS.Items.Clear();

            string Nodoinicial = textBoxOrigen.Text;
            string NodoFinal   = textBoxDestino.Text;

            if (noTieneAdyacentes(Nodoinicial))
            {
                MessageBox.Show("Ese Nodo no tiene adyacentes no se pueden calcular rutas");
            }
            else
            {
                foreach (Nodo n in g.listaNodo)
                {
                    DijkstraElementos Elemento = new DijkstraElementos(n.getCiudad().GetNombreCiudadString());

                    if (Elemento.actual == Nodoinicial)
                    {
                        //Console.WriteLine("sI ENTRO PAPU");
                        Elemento.distancia   = 0;
                        Elemento.definitivo  = false;
                        Elemento.proveniente = Nodoinicial;
                    }
                    listaDikstra.Add(Elemento);
                }

                int opc = 0;

                while (opc == 0)
                {
                    /* foreach(DijkstraElementos n in listaDikstra)
                     * {
                     *   Console.WriteLine(n.actual + " " + n.definitivo + " " + n.distancia + " " + n.proveniente);
                     * }*/

                    int indice = selecciona();

                    if (indice == -1)
                    {
                        int i = 0;
                        foreach (DijkstraElementos n in listaDikstra)
                        {
                            if (n.distancia == 1000000000 && n.definitivo == false)
                            {
                                n.definitivo  = true;
                                n.distancia   = 0;
                                n.proveniente = n.actual;
                            }

                            //Console.WriteLine(listaDikstra[i].actual + " " + listaDikstra[i].proveniente + " " + listaDikstra[i].distancia + " " + listaDikstra[i].definitivo);
                            i++;
                        }
                        // break;
                    }
                    else
                    {
                        listaDikstra[indice].definitivo = true;
                        if (listaDikstra[indice].proveniente != " " && listaDikstra[indice].actual != listaDikstra[indice].proveniente)
                        {
                            Vuelo v = new Vuelo(listaDikstra[indice].proveniente[0], listaDikstra[indice].actual[0], dAMETIEMPO(listaDikstra[indice].proveniente, listaDikstra[indice].actual), dAMECOSTO(listaDikstra[indice].proveniente, listaDikstra[indice].actual));
                            finalVuelos.Add(v);

                            if (v.getDestino() == NodoFinal[0])
                            {
                                Console.WriteLine("entro");
                                foreach (Vuelo n in finalVuelos)
                                {
                                    Console.WriteLine(n.getOrigen() + " " + n.getDestino() + " " + n.tiempo + " " + n.costo);
                                }
                                // Console.WriteLine("elementos dijkstar");

                                /* foreach (DijkstraElementos n in listaDikstra)
                                 * {
                                 *   Console.WriteLine(n.actual + " " + n.definitivo + " " + n.proveniente+ " " + n.distancia);
                                 * }*/
                                break;
                            }
                        }
                        // Console.WriteLine(listaDikstra[indice].proveniente + " " + listaDikstra[indice].actual + " " + Convert.ToString(listaDikstra[indice].distancia));

                        actualiza(listaDikstra[indice]);
                    }

                    if (condicionDefifitivos())
                    {
                        opc = 1;
                    }
                }
                bool banderaVacio = false;

                EscojeVuelos2_O(Nodoinicial[0], NodoFinal[0]);
                foreach (DijkstraElementos n in listaDikstra)
                {
                    // Console.WriteLine(n.actual + " " + n.definitivo + " " + n.distancia + " " + n.proveniente);
                    if (n.actual == NodoFinal && n.distancia == 0)
                    {
                        banderaVacio = true;
                    }
                }

                if (banderaVacio != true)
                {
                    AcListview();
                    buttonSold.Enabled = true;
                }
                else
                {
                    MessageBox.Show("No Existe Ruta Para llegar al Destino " + NodoFinal);
                }
            }
            DibujarOD();
        }
예제 #4
0
        //EMPEZAMOS HACER EL DIKSTRA

        private void button1_Click_1(object sender, EventArgs e)
        {
            ReiniciarTodo();
            listViewDikstra.Items.Clear();
            listViewRutAS.Items.Clear();
            string Nodoinicial = listViewCiudades.FocusedItem.SubItems[0].Text;

            if (noTieneAdyacentes(Nodoinicial))
            {
                panel.Refresh();
                MessageBox.Show("Ese Nodo no tiene adyacentes no se pueden calcular rutas");
            }
            else
            {
                foreach (Nodo n in g.listaNodo)
                {
                    DijkstraElementos Elemento = new DijkstraElementos(n.getCiudad().GetNombreCiudadString());

                    if (Elemento.actual == Nodoinicial)
                    {
                        Elemento.distancia   = 0;
                        Elemento.definitivo  = false;
                        Elemento.proveniente = Nodoinicial;
                    }
                    listaDikstra.Add(Elemento);
                }

                int opc = 0;

                while (opc == 0)
                {
                    /* foreach(DijkstraElementos n in listaDikstra)
                     * {
                     *   Console.WriteLine(n.actual + " " + n.definitivo + " " + n.distancia + " " + n.proveniente);
                     * }*/

                    int indice = selecciona();

                    if (indice == -1)
                    {
                        int i = 0;
                        foreach (DijkstraElementos n in listaDikstra)
                        {
                            if (n.distancia == 1000000000 && n.definitivo == false)
                            {
                                n.definitivo  = true;
                                n.distancia   = 0;
                                n.proveniente = n.actual;
                            }

                            Console.WriteLine(listaDikstra[i].actual + " " + listaDikstra[i].proveniente + " " + listaDikstra[i].distancia + " " + listaDikstra[i].definitivo);
                            i++;
                        }
                        // break;
                    }
                    else
                    {
                        listaDikstra[indice].definitivo = true;
                        if (listaDikstra[indice].proveniente != " " && listaDikstra[indice].actual != listaDikstra[indice].proveniente)
                        {
                            Vuelo v = new Vuelo(listaDikstra[indice].proveniente[0], listaDikstra[indice].actual[0], listaDikstra[indice].distancia, 1);
                            finalVuelos.Add(v);
                        }
                        // Console.WriteLine(listaDikstra[indice].proveniente + " " + listaDikstra[indice].actual + " " + Convert.ToString(listaDikstra[indice].distancia));

                        actualiza(listaDikstra[indice]);
                    }

                    if (condicionDefifitivos())
                    {
                        opc = 1;
                    }
                }
                DibujarDijkstra();
                mostrarlistview();
                Rutas(Nodoinicial);
            }
        }