拓扑排序:
class Solution:
"""
@param: graph: A list of Directed graph node
@return: Any topological order for the given graph.
"""
def dfs(self,i,countrd,res):
# dfs就是把入度为0的item慢慢加入sequence,直到加完所有入度为0的item
# 首先0的入度为0,append进result.0的neighbor的入度都减1(1,2,3的入度均-1)
res.append(i)
countrd[i]-=1
for j in i.neighbors:
countrd[j]=countrd[j]-1
#如果入度减完以后等于0,那么也加入result
if countrd[j]==0:
self.dfs(j,countrd,res)
def topSort(self, graph):
# 把graph item加近dict,key为item,value是入度
countrd= {}
for item in graph:
countrd[item]=0
for i in countrd:
for j in i.neighbors:
countrd[j]=countrd[j]+1
# 如果入度为0,那么进入dfs
res=[]
for i in countrd:
if countrd[i]==0:
self.dfs(i,countrd,res)
return res