【发布时间】:2016-09-26 22:50:05
【问题描述】:
下面的代码用于根据给定的约束(maxTotalDist 和 maxDistOutdoors)找到最短路径。我已经得到它大部分的工作,但我遇到的问题是,即使我能够找到一条路径(在某些给定的问题上)。我无法确认我找到了它。
例如,如果找到路径,“访问过”列表,在代码中,应该是我获得的完整路径(然后测试该路径是否足以成为“最短路径” ”)。但是,我尝试实现的任何打印语句都没有被打印,以查看我正在点击的节点。 (即试图找到从节点'A'到节点'C'的路径,节点A有孩子['b','c']。如果我制作示例if语句(如果访问[ 0] == 'c'),打印语句不会关闭)。
无论如何,我知道这可能写得很糟糕,但任何帮助都会有所帮助。谢谢。
def bruteForceSearch1(digraph, start, end, maxTotalDist, maxDistOutdoors, visited = [])
if not (digraph.hasNode(start) and digraph.hasNode(end)):
raise ValueError('Start or End not in graph')
path = [str(start)]
if start == end:
return path
shortest = None
#This is the iterator talked about in the question
for node in digraph.childrenOf(start):
if (str(node) not in visited):
visited = visited + [str(node)]
#Sample print statement
if visited[0] == 'nodeName':
print "Node is part of search"
newPath = bruteForceSearch1(digraph, node, end, maxTotalDist, maxDistOutdoors, visited)
if newPath == None:
continue
if shortest != None:
totalShort, outdoorShort = digraph.getDistances(shortest)
total, outdoor = digraph.getDistances(path + newPath)
if (total <= maxTotalDist) and (outdoor <= maxDistOutdoors):
if (shortest == None):
shortest = newPath
else:
if (len(newPath) < len(shortest)):
shortest = newPath
elif (len(newPath) == len(shortest)) and (total <= totalShort) and (outdoor <= outdoorShort):
shortest = newPath
if shortest != None:
path = path + shortest
else:
path = None
return path
【问题讨论】:
-
我看到了mutable default,但你还是用
path = [str(start)]覆盖了 -
为什么不使用修改版的 Dijkstra's 两笔费用?
-
好的,感谢您通知我可变默认值。显然,代码正在通过图表“浏览”。出于某种原因,我仍然使用此代码得到“无”(无约束的解决方案)。如果约束是开放的,它确实给出了最短路径的解决方案,但如果约束很紧,那么它就会开始出现问题。所以,我可能会采纳你的建议 @Evil Tak 并修改 Dijkstra 的。
标签: python recursion iteration graph-theory