private void Form1_MouseMove(object sender, MouseEventArgs e)
 {
     if (M == true && NodoMovimiento != null)
     {
         NodoMovimiento.AsignarCoordenadas(e.X, e.Y);
         Form1_Paint(this, null);
     }
     else if (R == true && NodoInicio != null)
     {
         NodoDestino = BuscaNodo(e);
         if (NodoDestino != null && NodoDestino.Identificador != NodoInicio.Identificador)
         {
             if (grafo.Dirigido == false)
             {
                 NodoInicio.AñadirRelacion(NodoDestino.Identificador, 0);
                 NodoDestino.AñadirRelacion(NodoInicio.Identificador, 0);
             }
             else
             {
                 NodoInicio.AñadirRelacion(NodoDestino.Identificador, 0);
             }
             Form1_Paint(this, null);
             R = false;
         }
         XRel = e.X;
         YRel = e.Y;
         Form1_Paint(this, null);
     }
 }
        private void cargaGrafo()
        {
            string[]       CadenaInformacion;
            OpenFileDialog VentanaAbrir = new OpenFileDialog();

            VentanaAbrir.Filter = "Grafo (*.gfo)|*.gfo";
            if (VentanaAbrir.ShowDialog() == DialogResult.OK)
            {
                using (StreamReader Lector = new StreamReader(VentanaAbrir.FileName))
                {
                    while (!Lector.EndOfStream)
                    {
                        string Aux = Lector.ReadLine();
                        CadenaInformacion = Aux.Split('/');
                        if (Aux[0] == 'N')
                        {
                            Nodo NuevoNodo = new Nodo();
                            NuevoNodo.Identificador = Convert.ToInt32(CadenaInformacion[1]);
                            NuevoNodo.AsignarCoordenadas(Convert.ToInt32(CadenaInformacion[2]), Convert.ToInt32(CadenaInformacion[3]));
                            grafo.Nodos.Add(NuevoNodo);
                        }
                        else if (Aux[0] == 'R')
                        {
                            Nodo AuxNodo  = BuscaNodoInt(Convert.ToInt32(CadenaInformacion[1]));
                            Arco Relacion = new Arco();
                            AuxNodo.AñadirRelacion(Convert.ToInt32(CadenaInformacion[2]), Convert.ToInt32(CadenaInformacion[3]));
                        }
                    }
                    Form2_Paint(this, null);
                }
            }
        }
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            switch (TipoOperacion)
            {
            case -1:

                NodoMovimiento = BuscaNodo(e);
                if (NodoMovimiento != null)
                {
                    M = true;
                }
                break;

            case 0:
                Identificador++;
                Nodo Aux = new Nodo();
                Aux.AsignarCoordenadas(e.X, e.Y);
                Aux.Identificador = Identificador;
                grafo.AgregarNodo(Aux);
                Form1_Paint(this, null);
                break;

            case 1:
                Nodo aux = BuscaNodo(e);
                if (aux != null)
                {
                    if (MessageBox.Show("Estas seguro de eliminar el nodo : " + aux.Identificador + " ?", "Eliminar nodo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        grafo.EliminarNodo(aux);
                        Form1_Paint(this, null);
                        Identificador--;
                    }
                }
                break;

            case 2:     // Agregar Relación
                NodoInicio = BuscaNodo(e);
                if (NodoInicio != null)
                {
                    R = true;
                }
                break;

            case 3:     // Mover Nodo
                NodoMovimiento = BuscaNodo(e);
                M = true;
                break;

            case 4:
                Arco Relacion = BuscaRelacion(e);
                if (Relacion != null)
                {
                    if (grafo.Dirigido == true)
                    {
                        grafo.EliminaRelacion(BuscaNodoInt(Relacion.Origen), BuscaNodoInt(Relacion.Destino));
                    }
                    else
                    {
                        if (Relacion.Origen != Relacion.Destino)
                        {
                            grafo.EliminaRelacion(BuscaNodoInt(Relacion.Origen), BuscaNodoInt(Relacion.Destino));
                            Arco RelAux = BuscaRelacionNodo(BuscaNodoInt(Relacion.Destino), Relacion.Origen);
                            grafo.EliminaRelacion(BuscaNodoInt(RelAux.Origen), BuscaNodoInt(RelAux.Destino));
                        }
                        else
                        {
                            grafo.EliminaRelacion(BuscaNodoInt(Relacion.Origen), BuscaNodoInt(Relacion.Destino));
                        }
                    }
                    Form1_Paint(this, null);
                }
                break;

            case 5:
                Arco RelacionPeso = BuscaRelacion(e);
                if (RelacionPeso != null)
                {
                    int Peso = Convert.ToInt32(Interaction.InputBox("Ingresa el nuevo peso de la relación: " + RelacionPeso.Origen + " - " + RelacionPeso.Destino));
                    if (grafo.Dirigido == true)
                    {
                        RelacionPeso.Peso = Peso;
                    }
                    else
                    {
                        Arco RelacionAuxiliarPeso = BuscaRelacionNodo(BuscaNodoInt(RelacionPeso.Destino), RelacionPeso.Origen);
                        RelacionPeso.Peso         = Peso;
                        RelacionAuxiliarPeso.Peso = Peso;
                    }
                }
                break;

            case 6:
                Nodo NodoAux = BuscaNodo(e);
                if (NodoAux != null)
                {
                    MessageBox.Show("El grado de salida del nodo es: " + NodoAux.ObtenGradoNodo().ToString() + "\n" + "El grado de entrada del nodo es: " + grafo.ObtenGradoEntradaNodo(NodoAux));
                }
                break;

            case 7:
                if (!banderaCamino)
                {
                    if (BuscaNodo(e) != null)
                    {
                        NodoCamino1 = BuscaNodo(e).Identificador;
                        LB_NodosSeleccionados.Text = "Nodo Seleccionado:\n" + NodoCamino1;
                        banderaCamino = true;
                        break;
                    }
                }
                if (banderaCamino)
                {
                    if (BuscaNodo(e) != null)
                    {
                        NodoCamino2   = BuscaNodo(e).Identificador;
                        banderaCamino = false;
                        LB_NodosSeleccionados.Text = "Nodos Seleccionados:\n\t\t" + "{" + NodoCamino1 + " , " + NodoCamino2 + "}";
                        TipoOperacion = -1;
                        break;
                    }
                }
                break;
            }
        }