Пример #1
0
 public CArco(CVertice destino, int peso)
 {
     this.nDestino      = destino;
     this.peso          = peso;
     this.grosor_flecha = 2;
     this.color         = Color.Red;
 }
Пример #2
0
 public CArco(CVertice destino, int peso)
 {
     this.nDestino = destino;
     this.peso = peso;
     this.grosor_flecha = 2;
     this.color = Color.Red;
 }
Пример #3
0
        private void Pizarra_MouseUp(object sender, MouseEventArgs e)
        {
            switch (var_control)
            {
            case 1:    //Dibujando arco

                if ((NodoDestino = grafo.DetectarPunto(e.Location)) != null && NodoOrigen != NodoDestino)
                {
                    if (grafo.AgregarArco(NodoOrigen, NodoDestino))  //Se procede a crear la arista
                    {
                        int    distX     = Math.Abs(NodoDestino.Posicion.X - NodoOrigen.Posicion.X);
                        int    distY     = Math.Abs(NodoDestino.Posicion.Y - NodoOrigen.Posicion.Y);
                        double distancia = Math.Sqrt(distY * distY + distX * distX);


                        NodoOrigen.ListaAdyacencia.Find(v => v.nDestino == NodoDestino).peso = (int)distancia;
                    }
                }
                var_control = 0;
                NodoOrigen  = null;
                NodoDestino = null;
                Pizarra.Refresh();
                break;
            }
        }
Пример #4
0
        //=====================Operaciones básicas=======================

        //Construye un nodo a partir de su valor y lo agrega a la lista de nodos
        public CVertice AgregarVertice(string valor)
        {
            CVertice nodo = new CVertice(valor);

            nodos.Add(nodo);
            Count++;
            return(nodo);
        }
Пример #5
0
 public CLista(CLista pLista)
 {
     if (pLista != null)
     {
         aElemento = pLista.aElemento;
         aSubLista = pLista.aSubLista;
         aPeso     = pLista.aPeso;
     }
 }
Пример #6
0
 public CLista(CLista pLista)
 {
     if (pLista != null)
     {
         aElemento = pLista.aElemento;
         aSubLista = pLista.aSubLista;
         aPeso = pLista.aPeso;
     }
 }
Пример #7
0
 // Crea la arista a partir de los nodos de origen y de destino
 public bool AgregarArco(CVertice origen, CVertice nDestino, int peso = 1)
 {
     if (origen.ListaAdyacencia.Find(v => v.nDestino == nDestino) == null)
     {
         origen.ListaAdyacencia.Add(new CArco(nDestino, peso));
         return true;
     }
     return false;
 }
Пример #8
0
 //Crea una arista a partir de los nodos de origen y destino.
 public bool AgregarArco(CVertice origen, CVertice nDestino, int peso = 1)
 {
     if (origen.ListaAdyacencia.Find(v => v.nDestino == nDestino) == null)
     {
         origen.ListaAdyacencia.Add(new CArco(nDestino, peso));
         return(true);
     }
     return(false);
 }
Пример #9
0
        private Vertice ventanaVertice;//Ventana para agregar los vértices

        public Simulador()
        {
            InitializeComponent();
            grafo          = new CGrafo();
            nuevoNodo      = null;
            var_control    = 0;
            ventanaVertice = new Vertice();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
        }
Пример #10
0
        private Vertice ventanaVertice; // ventana para agregar los vértices

        #endregion Fields

        #region Constructors

        public Simulador()
        {
            InitializeComponent();
            nuevoNodo = null;
            var_control = 0;
            ventanaVertice = new Vertice();
            ventanaArco = new Arco();
            ventanaRecorrido = new Recorrido();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
        }
Пример #11
0
 private void Pizarra_MouseDown(object sender, MouseEventArgs e)
 {
     if (e.Button == System.Windows.Forms.MouseButtons.Left) // Si se ha presionado el botón
     // izquierdo del mouse
     {
         if ((NodoOrigen = grafo.DetectarPunto(e.Location)) != null)
         {
             var_control = 1; // recordemos que es usado para indicar el estado en la pizarra:
             // 0 -> sin accion, 1 -> Dibujando arco, 2 -> Nuevo vértice
         }
         if (nuevoNodo != null && NodoOrigen == null)
         {
             ventanaVertice.Visible = false;
             ventanaVertice.control = false;
             grafo.AgregarVertice(nuevoNodo);
             ventanaVertice.ShowDialog();
             if (ventanaVertice.control)
             {
                 if (grafo.BuscarVertice(ventanaVertice.txtVertice.Text) == null)
                 {
                     nuevoNodo.Valor = ventanaVertice.txtVertice.Text;
                 }
                 else
                 {
                     MessageBox.Show("El Nodo " + ventanaVertice.txtVertice.Text + " ya existe en el grafo ", "Error nuevo Nodo ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                     grafo.EliminarVertice(nuevoNodo);
                 }
             }
             nuevoNodo = null;
             var_control = 0;
             Pizarra.Refresh();
         }
     }
     if (e.Button == System.Windows.Forms.MouseButtons.Right) // Si se ha presionado el botón
     // derecho del mouse
     {
         if (var_control == 0)
         {
             if ((NodoOrigen = grafo.DetectarPunto(e.Location)) != null)
             {
                 CMSCrearVertice.Text = "Nodo " + NodoOrigen.Valor;
             }
             else
                 Pizarra.ContextMenuStrip = this.CMSCrearVertice;
         }
     }
 }
Пример #12
0
        private void Pizarra_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                if ((NodoOrigen = grafo.DetectarPunto(e.Location)) != null)
                {
                    var_control = 1;
                }
                if (nuevoNodo != null && NodoOrigen == null)
                {
                    ventanaVertice.Visible = false;
                    ventanaVertice.control = false;
                    grafo.AgregarVertice(nuevoNodo);
                    ventanaVertice.ShowDialog();

                    if (ventanaVertice.control)
                    {
                        if (grafo.BuscarVertice(ventanaVertice.txtVertice.Text) == null)
                        {
                            nuevoNodo.Valor = ventanaVertice.txtVertice.Text;
                        }
                        else
                        {
                            MessageBox.Show("El Nodo " + ventanaVertice.txtVertice.Text + " ya existe en el grafo", "Error nuevo nodo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                    nuevoNodo   = null;
                    var_control = 0;
                    Pizarra.Refresh();
                }
            }
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                if (var_control == 0)
                {
                    if ((NodoOrigen = grafo.DetectarPunto(e.Location)) != null)
                    {
                        CMSCrearVertice.Text = "Nodo " + NodoOrigen.Valor;
                    }
                    else
                    {
                        Pizarra.ContextMenuStrip = this.CMSCrearVertice;
                    }
                }
            }
        }
Пример #13
0
 public bool ExisteElemento(CVertice pElemento)
 {
     if ((aElemento != null) && (pElemento != null))
     {
         return (aElemento.Equals(pElemento) ||
             (aSubLista.ExisteElemento(pElemento)));
     }
     else
         return false;
 }
Пример #14
0
 //Agrega un nodo a la lista de nodos del grafo
 public void AgregarVertice(CVertice nuevonodo)
 {
     nodos.Add(nuevonodo);
 }
Пример #15
0
 // Constructores
 public CLista()
 {
     aElemento = null;
     aSubLista = null;
     aPeso     = 0;
 }
Пример #16
0
 private void Pizarra_MouseUp(object sender, MouseEventArgs e)
 {
     switch (var_control)
     {
         case 1: // Dibujando arco
             ventanaArco.Visible = false;
             ventanaArco.control = false;
             if ((NodoDestino = grafo.DetectarPunto(e.Location)) != null && NodoOrigen != NodoDestino)
             {
                 ventanaArco.ShowDialog();
                 if (ventanaArco.control)
                 {
                     if (grafo.AgregarArco(NodoOrigen, NodoDestino)) //Se procede a crear la arista
                     {
                         int distancia = int.Parse(ventanaArco.txtArco.Text);
                         NodoOrigen.ListaAdyacencia.Find(v => v.nDestino == NodoDestino).peso = distancia;
                         if (NoDigrafo)
                             NodoDestino.ListaAdyacencia.Find(v => v.nDestino == NodoOrigen).peso = distancia;
                     }
                 }
             }
             var_control = 0;
             NodoOrigen = null;
             NodoDestino = null;
             Pizarra.Refresh();
             break;
     }
 }
Пример #17
0
 //Agrega un nodo a la lista de nodos del grafo
 public void AgregarVertice(CVertice nuevonodo)
 {
     nodos = (Object[,])ResizeArray(nodos, cantNodos + 1);
     nodos[cantNodos, 0] = nuevonodo;
     for (int x = 1; x <= cantNodos; x++)
     {
         nodos[cantNodos, x] = -1;
         nodos[x, cantNodos] = -1;
     }
     nodos[0, cantNodos] = nuevonodo;
     cantNodos++;
 }
Пример #18
0
 // Crea la arista a partir de los nodos de origen y de destino
 public bool AgregarArco(CVertice origen, CVertice nDestino, int peso = 1)
 {
     if (origen.ListaAdyacencia.Find(v => v.nDestino == nDestino) == null)
     {
         int index1 = 0, index2 = 0; //Variables para guardar los indices
         for (int x = 1; x < cantNodos; x++)
         {
             if (nodos[0, x] == origen) //Si el nodo origen es igual a alguno de los nodos en la matriz
                 index1 = x; //Guardar el indice
             if (nodos[x, 0] == nDestino) //Si el nodo destino es igual a alguno de los nodos de la matriz
                 index2 = x; //Guardar el indice
         }
         nodos[index1, index2] = peso; //Asociar el peso a esos indices de la matriz
         origen.ListaAdyacencia.Add(new CArco(nDestino, peso));
         return true;
     }
     return false;
 }
Пример #19
0
 // Constructores
 public CLista()
 {
     aElemento = null;
     aSubLista = null;
     aPeso = 0;
 }
Пример #20
0
 private void eliminarNodoToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (NodoOrigen != null)
         grafo.EliminarVertice(NodoOrigen);
     NodoOrigen = null;
     Pizarra.Refresh();
 }
Пример #21
0
 //Agrega un nodo a la lista de nodos del grafo
 public void AgregarVertice(CVertice nuevonodo)
 {
     nodos.Add(nuevonodo);
     Count++;
 }
Пример #22
0
 public CLista(CVertice pElemento, CLista pSubLista, int pPeso)
 {
     aElemento = pElemento;
     aSubLista = pSubLista;
     aPeso = pPeso;
 }
Пример #23
0
 public CLista(CVertice pElemento, CLista pSubLista, int pPeso)
 {
     aElemento = pElemento;
     aSubLista = pSubLista;
     aPeso     = pPeso;
 }
Пример #24
0
 public void Agregar(CVertice pElemento, int pPeso)
 {
     if (pElemento != null)
     {
         if (aElemento == null)
         {
             aElemento = new CVertice(pElemento.Valor);
             aPeso = pPeso;
             aSubLista = new CLista();
         }
         else
         {
             if (!ExisteElemento(pElemento))
                 aSubLista.Agregar(pElemento, pPeso);
         }
     }
 }
Пример #25
0
 private void NuevoVertice_Click(object sender, EventArgs e)
 {
     nuevoNodo   = new CVertice();
     var_control = 2;
 }
Пример #26
0
 public void Eliminar(CVertice pElemento)
 {
     if (aElemento != null)
     {
         if (aElemento.Equals(pElemento))
         {
             aElemento = aSubLista.aElemento;
             aSubLista = aSubLista.SubLista;
         }
         else
             aSubLista.Eliminar(pElemento);
     }
 }
Пример #27
0
 public int PosicionElemento(CVertice pElemento)
 {
     if ((aElemento != null) || (ExisteElemento(pElemento)))
         if (aElemento.Equals(pElemento))
             return 1;
         else
             return 1 + aSubLista.PosicionElemento(pElemento);
     else
         return 0;
 }
Пример #28
0
 //Construye un nodo a partir de su valor y lo agrega a la lista de nodos
 public CVertice AgregarVertice(string valor)
 {
     nodos = (Object[,])ResizeArray(nodos, cantNodos + 1);
     CVertice nodo = new CVertice(valor);
     nodos[cantNodos, 0] = nodo;
     for (int x = 1; x <= cantNodos; x++)
     {
         nodos[cantNodos, x] = -1;
         nodos[x, cantNodos] = -1;
     }
     nodos[0, cantNodos] = nodo;
     cantNodos++;
     return nodo;
 }
Пример #29
0
 //Eliminar la arista a partir del valor del nodo origin, destino y peso
 public bool EliminarArco(CVertice origen, CVertice nDestino, int peso = 1)
 {
     if (origen.ListaAdyacencia.Find(v => v.nDestino == nDestino) != null)
     {
         if (this.NoDigrafo)
         {
             origen.ListaAdyacencia.Remove(new CArco(nDestino, peso));
             nDestino.ListaAdyacencia.Remove(new CArco(origen, peso));
         }
         else
         {
             origen.ListaAdyacencia.Remove(new CArco(nDestino, peso));
         }
         return true;
     }
     return false;
 }
Пример #30
0
 private void Pizarra_MouseUp(object sender, MouseEventArgs e)
 {
     switch (var_control)
     {
         case 1: // Dibujando arco
             ventanaArco.Visible = false;
             ventanaArco.control = false;
             if ((NodoDestino = grafo.DetectarPunto(e.Location)) != null && NodoOrigen != NodoDestino)
             {
                 ventanaArco.ShowDialog();
                 if (ventanaArco.control)
                 {
                     int distancia = int.Parse(ventanaArco.txtArco.Text);
                     grafo.AgregarArco(NodoOrigen, NodoDestino, distancia);
                 }
             }
             var_control = 0;
             NodoOrigen = null;
             NodoDestino = null;
             Pizarra.Refresh();
             break;
     }
 }
Пример #31
0
 //Metodo para eliminar un nodo desde el valor CVertice
 public void EliminarVertice(CVertice nodo)
 {
     nodos.Remove(nodo);
 }
Пример #32
0
 // Métodos
 public CArco(CVertice destino)
     : this(destino, 1)
 {
     this.nDestino = destino;
 }
Пример #33
0
 //=====================Operaciones Básicas=================================
 //Construye un nodo a partir de su valor y lo agrega a la lista de nodos
 public CVertice AgregarVertice(string valor)
 {
     CVertice nodo = new CVertice(valor, NoDigrafo);
     nodos.Add(nodo);
     return nodo;
 }
Пример #34
0
 private void nuevoVerticeToolStripMenuItem_Click(object sender, EventArgs e)
 {
     nuevoNodo = new CVertice(NoDigrafo);
     var_control = 2; // recordemos que es usado para indicar el estado en la pizarra: 0 ->
     // sin accion, 1 -> Dibujando arco, 2 -> Nuevo vértice
 }
Пример #35
0
 // Constructor
 public CArco(CVertice destino) : this(destino, 1)
 {
     this.nDestino = destino;
 }