题目
思路
1.找到所有结点的入度
2.找到所有入度为0的结点。注意,这里有坑,入度为0的结点有可能不止有一个。
3.BFS
代码
"""
Definition for a Directed graph node
class DirectedGraphNode:
def __init__(self, x):
self.label = x
self.neighbors = []
"""
class Solution:
"""
@param: graph: A list of Directed graph node
@return: Any topological order for the given graph.
"""
def getInDegree(self, graph):
inDegreeDict = {}
queue = []
for node in graph:
for neighbor in node.neighbors:
if neighbor in inDegreeDict:
inDegreeDict[neighbor] += 1
else: inDegreeDict[neighbor] = 1
return inDegreeDict
def getStartNode(self, inDegreeDict, graph):
startNodes = []
for node in graph:
if node and node not in inDegreeDict:
startNodes.append(node)
return startNodes
def topSort(self, graph):
# write your code here
queue = []
res_list = []
if not graph:
return []
inDegreeDict = self.getInDegree(graph)
startNodes = self.getStartNode(inDegreeDict, graph)
for node in startNodes:
queue.append(node)
while queue:
node = queue[0]
queue.pop(0)
res_list.append(node)
for neighbor in node.neighbors:
inDegreeDict[neighbor] -= 1
if not inDegreeDict[neighbor]:
queue.append(neighbor)
return res_list