public override void buscaCiclos(Nodo nodo, int erdoz, Stack <string> rama, ref List <List <string> > ramas, ref List <List <string> > ciclos) { List <string> aux; nodo.Erdos = erdoz; rama.Push(nodo.Nombre); aux = rama.ToList(); ramas.Add(aux); //Arbol, Avance, Cruce, Retroceso foreach (Arista arista in nodo.Aristas) { if (arista.Arriba.Erdos == -1)//Arbol { arista.Tipo = "Arbol"; this.buscaCiclos(arista.Arriba, erdoz + 1, rama, ref ramas, ref ciclos); } else if (MetodosAuxiliares.NodoEnRamas(nodo.Nombre, arista.Arriba.Nombre, ramas)) { if (arista.Arriba.Erdos > nodo.Erdos) { arista.Tipo = "Avance"; } else if (arista.Arriba.Erdos < nodo.Erdos) { arista.Tipo = "Retroceso"; ciclos.Add(this.refinaCiclos(rama, arista.Arriba.Nombre, nodo.Nombre)); } } else { arista.Tipo = "Cruce"; } } rama.Pop(); }
public override void bosqueBusquedaProfunda(Nodo nodo, int erdoz, Stack <string> rama, ref List <List <string> > ramas) { List <string> aux; nodo.Erdos = erdoz; rama.Push(nodo.Nombre); aux = rama.ToList(); ramas.Add(aux); //Arbol, Avance, Cruce, Retroceso foreach (Arista arista in nodo.Aristas) { if (arista.Arriba.Erdos == -1)//Arbol { arista.Tipo = "Arbol"; bosqueBusquedaProfunda(arista.Arriba, erdoz + 1, rama, ref ramas); } else if (MetodosAuxiliares.NodoEnRamas(nodo.Nombre, arista.Arriba.Nombre, ramas)) { if (arista.Arriba.Erdos > nodo.Erdos) { arista.Tipo = "Avance"; } else if (arista.Arriba.Erdos < nodo.Erdos) { arista.Tipo = "Retroceso"; } } else { arista.Tipo = "Cruce"; } } /**/ rama.Pop(); }