[英]Facing a syntactic problem in Directed Acyclic Graph Python
这里我使用 DAG 来解决作业调度问题。
from collections import defaultdict
class JobGraph:
def __init__(self):
self.graph = defaultdict(list)
self.indegree = defaultdict(int)
self.visited = set()
def addEdge(u, v):
self.graph(u).append(v)
try:
self.indegree[v] += 1
except:
self.indegree[v] = 1
def topologicalSort(jobs, deps, queue = [], order = [], flag = 0):
# Write your code here.
if flag == 0:
g = JobGraph()
for dep in deps:
g.addEgde(dep[0], dep[1])
for job in jobs:
if g.indegree[job] == 0:
queue.append(job)
order.append(queue[0])
root = queue[0]
del queue[0]
for neighbour in self.graph[root]:
g.indegree[neighbour] -= 1
if g.indegree[neighbour] == 0 and neighbour not in g.visited:
queue.append(neighbour)
if len(queue) == 0:
return order
else:
topologicalSort(jobs, deps, queue, order, 1)
但我得到的错误是
'JobGraph' object has no attribute 'addEgde'
Traceback (most recent call last):
File "/tester/json_wrapper.py", line 8, in run
actual = program.topologicalSort(inputs["jobs"][:], aelib.deepCopy(inputs["deps"]))
File "/tester/program.py", line 20, in topologicalSort
g.addEgde(dep[0], dep[1])
AttributeError: 'JobGraph' object has no attribute 'addEgde'
我知道这是一个语法问题我只是不知道如何解决它
输入示例
jobs = [1,2,3,4]
deps = [[1,2], [1,3], [3,2], [4,2], [4,3]]
您的代码似乎还有其他问题,但导致此错误的问题很简单也很明显。 您可以像这样定义一个名为addEdge
的方法:
def addEdge(u, v):
但是随后您正在调用一个名为addEgde
的方法,如下所示:
g.addEgde(dep[0], dep[1])
你只是有一个错字。 addEdge != addEgde
。 你已经颠倒了g
和d
。
顺便说一句,该方法的签名可能应该是:
def addEdge(self, u, v):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.