public CArco(CVertice destino, int peso) { this.nDestino = destino; this.peso = peso; this.grosor_flecha = 2; this.color = Color.Red; }
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; } }
//=====================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); }
public CLista(CLista pLista) { if (pLista != null) { aElemento = pLista.aElemento; aSubLista = pLista.aSubLista; aPeso = pLista.aPeso; } }
// 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; }
//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); }
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); }
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); }
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; } } }
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; } } } }
public bool ExisteElemento(CVertice pElemento) { if ((aElemento != null) && (pElemento != null)) { return (aElemento.Equals(pElemento) || (aSubLista.ExisteElemento(pElemento))); } else return false; }
//Agrega un nodo a la lista de nodos del grafo public void AgregarVertice(CVertice nuevonodo) { nodos.Add(nuevonodo); }
// Constructores public CLista() { aElemento = null; aSubLista = null; aPeso = 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; } }
//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++; }
// 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; }
private void eliminarNodoToolStripMenuItem_Click(object sender, EventArgs e) { if (NodoOrigen != null) grafo.EliminarVertice(NodoOrigen); NodoOrigen = null; Pizarra.Refresh(); }
//Agrega un nodo a la lista de nodos del grafo public void AgregarVertice(CVertice nuevonodo) { nodos.Add(nuevonodo); Count++; }
public CLista(CVertice pElemento, CLista pSubLista, int pPeso) { aElemento = pElemento; aSubLista = pSubLista; aPeso = pPeso; }
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); } } }
private void NuevoVertice_Click(object sender, EventArgs e) { nuevoNodo = new CVertice(); var_control = 2; }
public void Eliminar(CVertice pElemento) { if (aElemento != null) { if (aElemento.Equals(pElemento)) { aElemento = aSubLista.aElemento; aSubLista = aSubLista.SubLista; } else aSubLista.Eliminar(pElemento); } }
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; }
//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; }
//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; }
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; } }
//Metodo para eliminar un nodo desde el valor CVertice public void EliminarVertice(CVertice nodo) { nodos.Remove(nodo); }
// Métodos public CArco(CVertice destino) : this(destino, 1) { this.nDestino = destino; }
//=====================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; }
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 }
// Constructor public CArco(CVertice destino) : this(destino, 1) { this.nDestino = destino; }