private Arco ObtienePrimerArco(NodoGrafo nodo) { Arco arco = null; if (nodo.arcos != null && nodo.arcos.Count > 0) { arco = nodo.arcos.First(); } return(arco); }
private void AdicionaRutaFinal(ref List <NodoGrafo> rutaActual, ref List <List <NodoGrafo> > rutasFinales) { NodoGrafo nodoAux = null; nodoAux = rutaActual.Last(); if (nodoAux.arcos == null && !existeRutaFinal(rutaActual, ref rutasFinales)) //Es el nodo de fin { rutasFinales.Add(rutaActual); } // else if(nodoAux.arcos!=null && nodoAux.arcos.Count>0) { // rutasPendientes.Push(rutaActual); // } }
private void relacionarNodo(NodoGrafo nodoPredecesor, NodoGrafo nodo) { List <NodoGrafo> arcos = null; arcos = new List <NodoGrafo>(); if (nodoPredecesor.arcos != null && nodoPredecesor.arcos.Count > 0) { nodoPredecesor.arcos.Add(nodo); } else if (nodoPredecesor.arcos == null) { arcos.Add(nodo); nodoPredecesor.arcos = arcos; } }
private void mostrarNodoRelaciones(NodoGrafo nodo, bool hayPendientes) { if (nodo != null && nodo.arcos != null && nodo.arcos.Count > 0) { Console.WriteLine($@"[{nodo.label}] se relaciona con:"); foreach (NodoGrafo n in nodo.arcos) { Console.WriteLine($"\t––> [{n.label}]({n.peso})"); } } else if (nodo != null && nodo.arcos == null && !hayPendientes) { Console.WriteLine($@"[{nodo.label}]."); } }
public void InsertarRelacionarNodo(string labelPredecesor, string labelNodo, int peso) { NodoGrafo nodo = null; NodoGrafo nodoPredecesor = null; nodo = new NodoGrafo(labelNodo, peso); if (labelPredecesor == null && estaVacio()) { inicio = nodo; } else if (!estaVacio() && existeNodo(labelPredecesor)) { nodoPredecesor = ObtenerNodo(labelPredecesor); relacionarNodo(nodoPredecesor, nodo); } }
private void AdicionaRutaPendientes(ref List <NodoGrafo> rutaActual, ref Stack <List <NodoGrafo> > rutasPendientes) { List <NodoGrafo> rutaActualAux = null; NodoGrafo nodoAux = null; rutaActualAux = new List <NodoGrafo>(rutaActual.GetRange(0, rutaActual.Count - 1).ToList()); nodoAux = rutaActualAux.Last(); if (nodoAux.arcos != null && nodoAux.arcos.Count > 1) { foreach (Arco a in nodoAux.arcos.GetRange(1, nodoAux.arcos.Count - 1).ToList()) { rutaActualAux = new List <NodoGrafo>(rutaActual.GetRange(0, rutaActual.Count - 1).ToList()); rutaActualAux.Add(a.nodo); rutasPendientes.Push(rutaActualAux); } } }
private NodoGrafo ObtenerNodo(string label) { NodoGrafo nodoAux = null; Stack <NodoGrafo> nodosPendientes = null; if (!estaVacio()) { nodosPendientes = new Stack <NodoGrafo>(); nodosPendientes.Push(inicio); while (true) { if (nodosPendientes.Any()) { nodoAux = nodosPendientes.Pop(); if (nodoAux.label.ToUpper().Equals(label.ToUpper())) //Se encontro el nodo { if (label.ToUpper().Equals("B")) { // Console.WriteLine($"hashcode: {nodoAux.GetHashCode()}"); // Console.WriteLine($"count: {((nodoAux.arcos!=null) ? nodoAux.arcos.Count.ToString() : "nulo")}"); // Console.WriteLine($"l2: {nodoAux.l2}"); } break; } else if (nodoAux.arcos != null && nodoAux.arcos.Count > 0) { foreach (Arco a in nodoAux.arcos) { nodosPendientes.Push(a.nodo); } } } else //Termino de recorrer el grafo y no se encontro { nodoAux = null; break; } } } return(nodoAux); }
public void InsertarRelacionarNodo(string labelPredecesor, string labelNodo, int peso) { NodoGrafo nodo = null; NodoGrafo nodoPredecesor = null; nodo = new NodoGrafo(labelNodo); if (labelPredecesor == null && estaVacio()) { inicio = nodo; } else if (!estaVacio() && existeNodo(labelPredecesor)) { Console.WriteLine($"\t{labelPredecesor} - {labelNodo}({peso})"); if (existeNodo(labelNodo)) { nodo = ObtenerNodo(labelNodo); } nodoPredecesor = ObtenerNodo(labelPredecesor); relacionarNodo(nodoPredecesor, nodo, peso); } }
public void MostrarGrafo() { NodoGrafo nodoAux = null; Queue <NodoGrafo> nodosPendientes = null; if (!estaVacio()) { nodosPendientes = new Queue <NodoGrafo>(); nodosPendientes.Enqueue(inicio); while (nodosPendientes.Any()) { nodoAux = nodosPendientes.Dequeue(); mostrarNodoRelaciones(nodoAux, nodosPendientes.Any()); foreach (NodoGrafo n in nodoAux.arcos ?? Enumerable.Empty <NodoGrafo>()) { if (!nodosPendientes.Any(x => x.label.ToUpper().Equals(n.label.ToUpper()))) //No permite encolar ya encolados, asi se evita mostrar nodos–predecesores ya mostrados { nodosPendientes.Enqueue(n); } } } } }
private NodoGrafo ObtenerNodo(string label) { NodoGrafo nodoAux = null; Stack <NodoGrafo> nodosPendientes = null; if (!estaVacio()) { nodosPendientes = new Stack <NodoGrafo>(); nodosPendientes.Push(inicio); while (true) { if (nodosPendientes.Any()) { nodoAux = nodosPendientes.Pop(); if (nodoAux.label.ToUpper().Equals(label.ToUpper())) //Se encontro el nodo { break; } else if (nodoAux.arcos != null && nodoAux.arcos.Count > 0) { foreach (NodoGrafo n in nodoAux.arcos) { nodosPendientes.Push(n); } } } else //Termino de recorrer el grafo y no se encontro { nodoAux = null; break; } } } return(nodoAux); }
public Grafo() { this.inicio = null; this.cantidadNodos = 0; }
private int obtenerPesoArco(NodoGrafo nodoPredecesor, NodoGrafo nodo) { return(nodoPredecesor.arcos.Where(x => x.nodo == nodo).First().peso); }