/
topsort.py
45 lines (40 loc) · 1.09 KB
/
topsort.py
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from pygraph.classes.digraph import digraph
from pygraph.algorithms.searching import depth_first_search
from pygraph.algorithms.generators import generate
from pygraph.algorithms.cycles import find_cycle
from mytranverse import tranverse
dg2 = generate(8,10,directed=True)
node_status = dict()
node_par = dict()
toporder = []
def sweep():
global node_status
global node_par
global dg2
node_list = dg2.nodes()
for node in node_list:
node_status[node] = 'white'
for node in node_list:
if(node_status[node] == 'white'):
node_par[node] = 'none'
dfs(node)
def dfs(vnode):
global node_status
global node_par
global dg2
for node in dg2.neighbors(vnode):
if(node_status[node] == 'white'):
node_status[node] = 'grey'
node_par[node] = vnode
dfs(node)
node_status[vnode] = 'black'
toporder.insert(0,vnode)
def main():
global dg2
while find_cycle(dg2):
dg2 = generate(8,10,directed=True)
sweep()
print dg2
print toporder
if __name__ == '__main__':
main()