public string OrdenacaoTopologica(OrderVertice orderVertice) { var matrizAdjacencia = new List <MatrizAdjacencia> { new MatrizAdjacencia { Inicio = 7, Fim = 11 }, new MatrizAdjacencia { Inicio = 7, Fim = 8 }, new MatrizAdjacencia { Inicio = 5, Fim = 11 }, new MatrizAdjacencia { Inicio = 3, Fim = 8 }, new MatrizAdjacencia { Inicio = 3, Fim = 10 }, new MatrizAdjacencia { Inicio = 11, Fim = 2 }, new MatrizAdjacencia { Inicio = 11, Fim = 9 }, new MatrizAdjacencia { Inicio = 11, Fim = 10 }, new MatrizAdjacencia { Inicio = 8, Fim = 9 } }; var elementosOrdenados = new List <object>(); var verticesSemArestaDeEntrada = VerticeSemArestaDeEntrada(matrizAdjacencia); verticesSemArestaDeEntrada = OrderObjects(orderVertice, verticesSemArestaDeEntrada); while (verticesSemArestaDeEntrada.Any()) { var n = verticesSemArestaDeEntrada.First(); verticesSemArestaDeEntrada.Remove(n); elementosOrdenados.Add(n); foreach (var e in matrizAdjacencia.Where(e => e.Inicio.Equals(n)).ToList()) { var m = e.Fim; matrizAdjacencia.Remove(e); if (matrizAdjacencia.All(me => me.Fim.Equals(m) == false)) { verticesSemArestaDeEntrada.Add(m); verticesSemArestaDeEntrada = OrderObjects(orderVertice, verticesSemArestaDeEntrada); } } } if (matrizAdjacencia.Any()) { return(null); } return(string.Join(" -> ", elementosOrdenados)); }
private List <object> OrderObjects(OrderVertice orderVertice, List <object> objects) { return(orderVertice == OrderVertice.Ascending ? objects.OrderBy(a => a).ToList() : orderVertice == OrderVertice.Descending ? objects.OrderByDescending(a => a).ToList() : objects); }