public void algoritmoKruskal() { GrafoNoDirigido grafoK = new GrafoNoDirigido(grafo); List <List <NodoP> > componentes = grafoK.kruskal(); rel = new List <Arista>(); Arista temp; foreach (List <NodoP> np in componentes) { for (int i = 0; i < np.Count; i++) { temp = new Arista(0); int j = i + 1; temp.peso = buscaPeso(np[i], np[j]); temp.origen = np[i]; i++; temp.destino = np[i]; rel.Add(temp); } } rel = rel.OrderBy(x => x.peso).ToList(); Componente componente = new Componente(); componente.Show(); componente.Next.Click += Next_Click; }
public override Grafo complemento(Graphics g) { NodoP nn; Arista nnr; Grafo nuevo = new Grafo(); foreach (NodoP np in this) { nn = new NodoP(np.nombre, np.centro); nuevo.Add(nn); } nuevo = new GrafoNoDirigido(nuevo); foreach (NodoP aux1 in this) // Ciclo que recorre los nodos del grafo { if (aux1.aristas.Count == 0) // si el nodo no tiene aristas { foreach (NodoP aux2 in nuevo) // Ciclo que recorre los nodos del grafo "copia" { if (aux1.nombre != aux2.nombre) // Condición para que el nodo no apunte a si mismo { nnr = new Arista(0); nnr.origen = nuevo.Find(x => x.nombre.Equals(aux1.nombre)); nnr.destino = aux2; nuevo.Find(x => x.nombre.Equals(aux1.nombre)).aristas.Add(nnr); } } } else // Si el nodo ya tiene Aristas { foreach (NodoP aux2 in nuevo) // Ciclo que recorre los nodos { if (aux1.nombre != aux2.nombre) // Compara que el nodo no se apunte a si mismo { Arista r = new Arista(0); r = aux1.aristas.Find(x => x.destino.nombre.Equals(aux2.nombre)); if (r == null) { nnr = new Arista(0); nnr.origen = nuevo.Find(x => x.nombre.Equals(aux1.nombre)); nnr.destino = aux2; if (nnr != null) { nuevo.Find(x => x.nombre.Equals(aux1.nombre)).aristas.Add(nnr); } } } } } } //base.complemento(g); return(nuevo); }