private Arista seleccion(ListaAristas candidatos, string subGrafo) { Arista aux = new Arista(); int indice = new int(); for (int i = 0; i < candidatos.Count; i++) { if (subGrafo.Contains(candidatos[i].Origen))//si la cadena subgrafo contiene el origen pero no el destino se utiliza { if (!subGrafo.Contains(candidatos[i].getDestino())) { indice = i; aux = candidatos[i]; break; } } else { if (subGrafo.Contains(candidatos[i].getDestino())) { indice = i; aux = candidatos[i]; break; } } } candidatos.RemoveAt(indice); return(aux); }
public Grafo kruskal() { Grafo prometedor = new Grafo(); ListaAristas candidatos = new ListaAristas(); nodosKruskal = new ListaAristas(); List <string> compConex = new List <string>(); for (int i = 0; i < this.Count; i++) { for (int j = 0; j < this[i].getListAristas().Count; j++) { candidatos.Add(this[i].getListAristas()[j]); } } for (int i = 0; i < this.Count; i++) { compConex.Add(Convert.ToString(this[i].getOrigen())); } quickSort(ref candidatos, 0, candidatos.Count - 1); int c1 = new int(); int c2 = new int(); for (int contador = 0; prometedor.getListaKruskal().Count < this.Count - 1; contador++) { Vertice u = new Vertice(candidatos[contador].Origen, buscaNodoX(candidatos[contador].Origen), buscaNodoY(candidatos[contador].Origen)); Vertice v = new Vertice(candidatos[contador].getDestino(), buscaNodoX(candidatos[contador].getDestino()), buscaNodoY(candidatos[contador].getDestino())); //**Seleccion Arista a = new Arista(u.getOrigen(), v.getOrigen(), candidatos[contador].Peso, buscaNodoX(v.getOrigen()), buscaNodoY(v.getOrigen())); c1 = buscaKruskal(u.getOrigen(), compConex); c2 = buscaKruskal(v.getOrigen(), compConex); if (c1 != c2) { int indicePrometedor = prometedor.contiene(u.getOrigen()); if (indicePrometedor != -1) { prometedor[indicePrometedor].getListAristas().Add(a); } else { u.getListAristas().Add(a); prometedor.Add(u); } if (prometedor.contiene(v.getOrigen()) == -1) { prometedor.Add(v); } //Fusion compConex[c1] += compConex[c2]; compConex.RemoveAt(c2); prometedor.getListaKruskal().Add(a); } } return(prometedor); }
public Vertice(char o, char d) { origen = o; listaA = new ListaAristas(); Arista a = new Arista(o, d); listaA.Add(a); x = new int(); y = new int(); }
public Grafo(ListaVuelos listaV, char b) { List <char> listaC = new List <char>(); nodosKruskal = new ListaAristas(); cantAristas = new int(); int x = new int(); int y = new int(); for (int i = 0; i < listaV.Count; i++) { if (!listaC.Contains((listaV[i].getOrigen()))) { listaC.Add(listaV[i].getOrigen()); } if (!listaC.Contains((listaV[i].getDestino()))) { listaC.Add(listaV[i].getDestino()); } } for (int i = 0; i < listaC.Count; i++) { ListaAristas listaA = new ListaAristas(); for (int j = 0; j < listaV.Count; j++) { if (listaC[i] == listaV[j].getOrigen()) { for (int k = 0; k < this.Count; k++) { if (this[k].getOrigen() == listaV[j].getDestino()) { x = this[k].X; y = this[k].Y; } } Arista a = new Arista(listaC[i], listaV[j].getDestino(), listaV[j].getTiempo(), x, y); listaA.Add(a); cantAristas++; } } Vertice v = new Vertice(listaC[i], listaA); this.Add(v); } }
public Grafo prim() { string subGrafo = ""; Grafo prometedor = new Grafo(); ListaAristas candidatos = new ListaAristas(); for (int i = 0; i < this.Count; i++) { for (int j = 0; j < this[i].getListAristas().Count; j++) { candidatos.Add(this[i].getListAristas()[j]); } } quickSort(ref candidatos, 0, candidatos.Count - 1); subGrafo = candidatos[0].Origen.ToString(); prometedor.Add(new Vertice(candidatos[0].Origen, buscaNodoX(candidatos[0].Origen), buscaNodoY(candidatos[0].Origen))); int numCandidatos = candidatos.Count; for (int i = 0; i < numCandidatos && prometedor.Count != this.Count; i++) { Vertice origen, destino; Arista a = seleccion(candidatos, subGrafo); prometedor.getListaKruskal().Add(a); if (subGrafo.Contains(a.Origen)) { subGrafo += a.getDestino(); destino = new Vertice(a.getDestino(), buscaNodoX(a.getDestino()), buscaNodoY(a.getDestino())); prometedor.Add(destino); prometedor[prometedor.contiene(a.Origen)].getListAristas().Add(a); } else if (subGrafo.Contains(a.getDestino())) { subGrafo += a.Origen; origen = new Vertice(a.Origen, buscaNodoX(a.Origen), buscaNodoY(a.Origen)); origen.getListAristas().Add(a); prometedor.Add(origen); } } return(prometedor); }
private void buttonAgregar_Click(object sender, EventArgs e) { bool duplicado = false; bool origenExisteEnGrafo, destinoExisteEnGrafo; origenExisteEnGrafo = destinoExisteEnGrafo = false; Vuelo vuelo = new Vuelo(Convert.ToChar(textBoxOrigen.Text), Convert.ToChar(textBoxDestino.Text), Int32.Parse(textBoxTiempo.Text), Int32.Parse(textBoxCosto.Text), dateTimePickerFechaSalida.Value); Arista arista1; int i, k; for (i = 0; i < listVuelos.Count; i++) { if (vuelo.getOrigen() == listVuelos[i].getOrigen() && vuelo.getDestino() == listVuelos[i].getDestino()) { duplicado = true; } } //********** if (!duplicado) { FormGrafo ventanaGrafo = new FormGrafo(grafoVuelos, true); Vertice vertice; for (i = 0; i < grafoVuelos.Count; i++) { if (grafoVuelos[i].getOrigen() == Convert.ToChar(textBoxOrigen.Text)) { origenExisteEnGrafo = true; break; } } for (k = 0; k < grafoVuelos.Count; k++) { if (grafoVuelos[k].getOrigen() == Convert.ToChar(textBoxDestino.Text)) { destinoExisteEnGrafo = true; break; } } if (origenExisteEnGrafo && destinoExisteEnGrafo) { arista1 = new Arista(grafoVuelos[i].getOrigen(), grafoVuelos[k].getOrigen(), vuelo.getCosto(), grafoVuelos[k].X, grafoVuelos[k].Y); grafoVuelos[i].getListAristas().Add(arista1); } else if (!origenExisteEnGrafo && destinoExisteEnGrafo) { arista1 = new Arista(vuelo.getOrigen(), grafoVuelos[k].getOrigen(), vuelo.getCosto(), grafoVuelos[k].X, grafoVuelos[k].Y); ventanaGrafo.ShowDialog(); vertice = new Vertice(Convert.ToChar(textBoxOrigen.Text), ventanaGrafo.getX(), ventanaGrafo.getY()); vertice.getListAristas().Add(arista1); grafoVuelos.Add(vertice); } else if (origenExisteEnGrafo && !destinoExisteEnGrafo) { ventanaGrafo.ShowDialog(); vertice = new Vertice(Convert.ToChar(textBoxDestino.Text), ventanaGrafo.getX(), ventanaGrafo.getY()); grafoVuelos.Add(vertice); arista1 = new Arista(grafoVuelos[i].getOrigen(), vertice.getOrigen(), vuelo.getCosto(), vertice.X, vertice.Y); grafoVuelos[i].getListAristas().Add(arista1); } else if (!origenExisteEnGrafo && !destinoExisteEnGrafo) { Vertice vertice2; ventanaGrafo.ShowDialog(); vertice = new Vertice(vuelo.getOrigen(), ventanaGrafo.getX(), ventanaGrafo.getY()); ventanaGrafo.ShowDialog(); vertice2 = new Vertice(vuelo.getDestino(), ventanaGrafo.getX(), ventanaGrafo.getY()); arista1 = new Arista(vertice.getOrigen(), vertice2.getOrigen(), vuelo.getCosto(), vertice2.X, vertice2.Y); vertice.getListAristas().Add(arista1); grafoVuelos.Add(vertice); grafoVuelos.Add(vertice2); } listVuelos.Add(vuelo); } //************* actualizarListViewVuelos(); }