주어진 코드는 maxTotalDist 및 maxDistOutdoors 제약 조건을 기반으로 최단 경로를 찾는 데 사용됩니다. 나는 그것을 가지고있다 대부분은 일하고있다. 그러나 내가 가지고있는 문제는 내가 (어떤 주어진 문제들에서) 길을 찾을 수있다하더라도 그것이다. 나는 을 확인할 수 없다.을 찾았습니다.재귀 함수의 반복 문제
예를 들어 경로가 발견되면 코드의 "visited"목록은 내가 얻은 전체 경로 여야합니다 (경로는 "가장 짧아야" 통로"). 그러나, 어떤 노드가 내가 타격 중인지 확인하기 위해 구현하려고하는 모든 인쇄 문은 인쇄되지 않습니다. (예 : 노드 'A'에서 노드 'C'로가는 경로를 찾으려고 할 때, 노드 A는 자식 [ 'b', 'c']를가집니다. 만약 샘플을 만들면 문 (방문한 경우 [=] c '), print 문은 꺼지지 않습니다.
어쨌든, 나는 이것이 정말로 잘못 쓰여졌을 것이라는 것을 알고 있지만, 도움이 될 것입니다. 감사.
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
[기본값 변경] (http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument)이 표시되지만 'path = [str (시작)]'any any –
Dijkstra의 수정 된 버전을 두 가지 비용으로 사용하지 않는 이유는 무엇입니까? – EvilTak
변경 가능한 기본값을 알려 주셔서 감사합니다. 분명히 코드는 그래프를 통해 "탐색"합니다. 어떤 이유로 나는이 코드로 여전히 "none"(제약 조건없는 솔루션 없음)을 얻고 있습니다. 제약 조건이 열려있는 경우 최단 경로에 대한 솔루션을 제공하지만 제약 조건이 엄격하면 문제가 발생하기 시작합니다. 그래서 저는 아마도 당신의 충고를 Evil Tak으로하고 Dijkstra 's를 수정할 것입니다. – Spraynard