-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
52 lines (49 loc) · 1.2 KB
/
utils.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
46
47
48
49
50
51
52
def topo_sort(endNode):
topo_list=[]
stack=[endNode]
count={}
while stack:
p=stack.pop()
if p in count:
count[p]+=1
else:
count[p]=1
stack.extend(p.parents)
temp=[endNode]
while temp:
p=temp.pop()
topo_list.append(p)
for parent in p.parents:
if count[parent]==1:
temp.append(parent)
else:
count[parent]-=1
return topo_list
def topo_sort_list(node_list):
topo_order=[]
for x in node_list:
y=topo_sort(x)
topo_order.extend(y)
return topo_order[::-1]
# visited = set()
# topo_order = []
# for node in node_list:
# depth_first_search(node, visited, topo_order)
# return topo_order
def depth_first_search(node, visited, topo_order):
"""
:param node:
:param visited:
:param topo_order:
:return:
"""
if node in visited:
return
visited.add(node)
for n in node.parents:
depth_first_search(n, visited, topo_order)
topo_order.append(node)
def sum_list(node_list):
from operator import add
from functools import reduce
return reduce(add,node_list)