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); }