示例#1
0
 private void rbnWarshall_Click(object sender, EventArgs e)
 {
     eliminarnodo = new Eliminarcs(2);
     eliminarnodo.Visible = false;
     eliminarnodo.control = false;
     eliminarnodo.ShowDialog();
     if (eliminarnodo.control)
     {
         if (grafo.BuscarVertice(eliminarnodo.txteliminar.Text.Trim()) != null && grafo.BuscarVertice(eliminarnodo.txtelem.Text.Trim()) != null)
         {
             rbnRestaurar.Enabled = true;
             splitContainer1.Panel2Collapsed = false;
             splitContainer1.SplitterDistance = (int)(this.Width * 0.75);
             PnSimulador.Refresh();
             PnSimulador.Visible = true;
             opc = 4;
             LblSimu.Text = "Simulacion: Algortimo de Warshall";
             double t = 0;
             Duracion.Restart();
             calcularMatricesIniciales();
             algoritmoWarshall();
             obtenerRutaPesoWarshall(eliminarnodo.txteliminar.Text.Trim(), eliminarnodo.txtelem.Text.Trim());
             if (buscarRuta)
             {
                 for (int x = 0; x < nodosRuta.Count; x++)
                 {
                     grafo.Colorear(nodosRuta[x]);
                     pbCanvas.Refresh();
                     if (x + 1 < nodosRuta.Count)
                     {
                         grafo.ColoArista(nodosRuta[x].Valor, nodosRuta[x + 1].Valor);
                         if (!EsDigrafo)
                             grafo.ColoArista(nodosRuta[x + 1].Valor, nodosRuta[x].Valor);
                     }
                     Thread.Sleep(tiempo);
                 }
                 buscarRuta = false;
             }
             pbCanvas.Refresh();
             Duracion.Stop();
             t = Duracion.ElapsedMilliseconds / 1000;
             label2.Text = "El peso minimo entre los nodos es: "+ peso.ToString()+"\nEl tiempo recorrido es de: "+t.ToString()+"seg";
         }
         else
         {
             MessageBox.Show("El nodo No se encuentra en el grafo",
             "Error Nodo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         }
     }
 }
示例#2
0
 private void btnDelNode_Click(object sender, EventArgs e)
 {
     eliminarnodo = new Eliminarcs(1); //eliminarnodo crea una ventana Eliminarcs con el valor de 1
     eliminarnodo.Visible = false; //Se actualiza el dato Visible
     eliminarnodo.control = false; //Se asigna false a control antes de mostrar el form
     eliminarnodo.ShowDialog(); //Muestra el dialogo para eliminar un nodo
     if (eliminarnodo.control)
     {
         if (grafo.BuscarVertice(eliminarnodo.txteliminar.Text.Trim()) != null) //si se encuentra el nodo
         {
             grafo.ELiminarNodo(eliminarnodo.txteliminar.Text.Trim()); //Elimina un nodo con tener el valor string de este
             grafo.RestablecerGrafo(pbCanvas.CreateGraphics()); //Se reestablece el grafo y se redibuja para quitar el nodo
             pbCanvas.Refresh(); //Se refresca el canvas
         }
         else //si no
         {
             MessageBox.Show("El nodo No se encuentra en el grafo",
            "Error Nodo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         }
     }
     aristas = 0;
     foreach (CVertice nodo in grafo.nodos)
     {
         foreach (CArco a in nodo.ListaAdyacencia)
             aristas++;
     }
     if (grafo.nodos.Count == 0)
     {
         DesHabilitarControles();
     }
     if (aristas == 0)
     {
         DesHabilitarControles();
     }
 }
示例#3
0
        private void rbnEliminarArista_Click(object sender, EventArgs e)
        {
            aristas = 0;
            eliminarnodo = new Eliminarcs(2);
            eliminarnodo.Visible = false;
            eliminarnodo.control = false;
            eliminarnodo.ShowDialog();
            if (eliminarnodo.control)
            {
                if (grafo.BuscarVertice(eliminarnodo.txteliminar.Text.Trim()) != null && grafo.BuscarVertice(eliminarnodo.txtelem.Text.Trim()) != null && grafo.Comprobararista(eliminarnodo.txteliminar.Text.Trim(), eliminarnodo.txtelem.Text.Trim()))
                {
                    grafo.ElimiarArco(eliminarnodo.txteliminar.Text.Trim(), eliminarnodo.txtelem.Text.Trim());
                    if (!EsDigrafo)
                        grafo.ElimiarArco(eliminarnodo.txtelem.Text.Trim(), eliminarnodo.txteliminar.Text.Trim());
                    grafo.RestablecerGrafo(pbCanvas.CreateGraphics());
                    pbCanvas.Refresh();
                }
                else
                {
                    MessageBox.Show("No existe esa arista",
                    "Error Nodo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }

            foreach (CVertice nodo in grafo.nodos)
            {
                foreach (CArco a in nodo.ListaAdyacencia)
                    aristas++;
            }
            if (aristas == 0)
            {
                rbnEliminarArista.Enabled = false;
                rbnRestaurar.Enabled = false;
                rbnWarshall.Enabled = false;
                rbnDijk.Enabled = false;
                btnRecorridoAnchura.Enabled = false;
                btnRecorridoProfundidad.Enabled = false;
                rbnBKruskal.Enabled = false;
                rbnBPrim.Enabled = false;
            }
        }