Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
 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);
 }