示例#1
0
        public bool IsDirectedAcyclicGraph()
        {
            int visitCount = 0;
            IEnumerable <long> IteratorI = Verticies.Keys;
            int noOfVertices             = Verticies.Count - 1;

            foreach (int srcVertex in IteratorI)
            {
                if (visitCount == noOfVertices)
                {
                    return(true);
                }

                List <Vertex> srcAdjList = Verticies[srcVertex].Adjacents;

                if (srcAdjList.Count == 0)
                {
                    visitCount++;
                    Console.WriteLine("Target Node - " + srcVertex);
                    IEnumerable <long> iteratorJ = Verticies.Keys;

                    foreach (long adjVertex in iteratorJ)
                    {
                        List <Vertex> adjList = Verticies[adjVertex].Adjacents;

                        if (adjList.Contains(Verticies[srcVertex]))
                        {
                            adjList.Remove(Verticies[srcVertex]);
                            Console.WriteLine("Deleting edge between target node " + srcVertex + " - " + adjVertex + " ");
                        }
                    }
                    Vertex v = new Vertex(0);
                    Verticies.TryRemove(srcVertex, out v);
                    IteratorI = Verticies.Keys;
                }
            }
            return(false);
        }