-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraph.py
More file actions
27 lines (21 loc) · 677 Bytes
/
graph.py
File metadata and controls
27 lines (21 loc) · 677 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from collections import deque
class Graph(object):
def __init__(self):
self.edges = {}
self.degrees = {}
def topological_sort(self):
frontier = deque()
results = []
for v, d in self.degrees.iteritems():
if d == 0:
frontier.append(v)
while frontier:
v = frontier.popleft()
results.append(v)
for u in self.edges[v]:
self.degrees[u] -= 1
if self.degrees[u] == 0:
frontier.append(u)
if len(results) < len(self.degrees):
raise RuntimeError('Graph has cycles.')
return results