我使用 python 实现拓扑排序时出错
errors in my implement of topological sort using python
更新
我在下面的代码中没有使用嵌套函数,但是答案是错误的:
{'s': 4, 't': 4, 'w': 4, 'v': 4}
我觉得是递归调用的问题,函数回调的时候n
没有减少,但是不知道怎么修改
import unittest
#dfs
def dfs(graph,start,visited,n,topo_order):
visited.add(start)
for w in graph[start]:
if w not in visited:
dfs(graph,w,visited,n,topo_order)
topo_order[start]=n
n-=1
def topological_sort(graph):
visited=set()
n=len(graph)
topo_order={}
for v in graph:
if v not in visited:
dfs(graph,v,visited,n,topo_order)
print(topo_order)
class topological_sort_test(unittest.TestCase):
def test(self):
file=[]
with open('topological_test.txt') as f:
data=f.read()
data=data.split('\n')
data=[i.split() for i in data]
G={}
for lst in data:
G[lst[0]]=lst[1:]
topological_sort(G)
if __name__=='__main__':
unittest.main()
def dfs(graph,start)
函数声明为变量创建局部作用域。要从外部访问任何变量,您需要将其作为参数传递给此函数。
更新
我在下面的代码中没有使用嵌套函数,但是答案是错误的:
{'s': 4, 't': 4, 'w': 4, 'v': 4}
我觉得是递归调用的问题,函数回调的时候n
没有减少,但是不知道怎么修改
import unittest
#dfs
def dfs(graph,start,visited,n,topo_order):
visited.add(start)
for w in graph[start]:
if w not in visited:
dfs(graph,w,visited,n,topo_order)
topo_order[start]=n
n-=1
def topological_sort(graph):
visited=set()
n=len(graph)
topo_order={}
for v in graph:
if v not in visited:
dfs(graph,v,visited,n,topo_order)
print(topo_order)
class topological_sort_test(unittest.TestCase):
def test(self):
file=[]
with open('topological_test.txt') as f:
data=f.read()
data=data.split('\n')
data=[i.split() for i in data]
G={}
for lst in data:
G[lst[0]]=lst[1:]
topological_sort(G)
if __name__=='__main__':
unittest.main()
def dfs(graph,start)
函数声明为变量创建局部作用域。要从外部访问任何变量,您需要将其作为参数传递给此函数。