Skip to content

Commit

Permalink
Merge pull request #116 from Sarbamoy/patch-1
Browse files Browse the repository at this point in the history
Topological_sort.py
  • Loading branch information
srbcheema1 authored Oct 13, 2017
2 parents 8d32fcf + caae0a1 commit 747d6e8
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions Sorting Algorithms/Python/topological_sort.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#Python program to print topological sorting of a DAG
from collections import defaultdict

#Class to represent a graph
class Graph:
def __init__(self,vertices):
self.graph = defaultdict(list) #dictionary containing adjacency List
self.V = vertices #No. of vertices

# function to add an edge to graph
def addEdge(self,u,v):
self.graph[u].append(v)

# A recursive function used by topologicalSort
def topologicalSortUtil(self,v,visited,stack):

# Mark the current node as visited.
visited[v] = True

# Recur for all the vertices adjacent to this vertex
for i in self.graph[v]:
if visited[i] == False:
self.topologicalSortUtil(i,visited,stack)

# Push current vertex to stack which stores result
stack.insert(0,v)

# The function to do Topological Sort. It uses recursive
# topologicalSortUtil()
def topologicalSort(self):
# Mark all the vertices as not visited
visited = [False]*self.V
stack =[]

# Call the recursive helper function to store Topological
# Sort starting from all vertices one by one
for i in range(self.V):
if visited[i] == False:
self.topologicalSortUtil(i,visited,stack)

# Print contents of stack
print stack

g= Graph(6)
g.addEdge(5, 2);
g.addEdge(5, 0);
g.addEdge(4, 0);
g.addEdge(4, 1);
g.addEdge(2, 3);
g.addEdge(3, 1);

print "Following is a Topological Sort of the given graph"
g.topologicalSort()

0 comments on commit 747d6e8

Please sign in to comment.