나는이 프로젝트를하고 있는데 어떤 경로가 가장 짧은 길이인지 알아 내는데 문제가있다. 설정은 슈퍼마켓입니다. 입구에서 시작하면 현금 데크에서 나옵니다. 점 A, B, C, D는 베이크 오프 (bake-off) 등 슈퍼마켓의 섹션에있는 점입니다. 'via'입력에서 전달하려는 점을 제공 할 수 있습니다.파이썬에서 가중 그래프의 경로 길이를 어떻게 계산합니까?
#e = entrance
#k = cash desk
graph1 = {'e':{'a':1, 'b':5, 'c':6, 'd':6},
'a':{'e':2, 'b':4, 'c':5, 'd':5, 'k':7},
'b':{'e':5, 'a':5, 'c':3, 'd':5, 'k':6},
'c':{'e':6, 'a':5, 'b':3, 'd':4, 'k':5},
'd':{'e':6, 'a':3, 'b':5, 'c':4, 'k':2},
'k':{'a':7, 'b':6, 'c':5, 'd':2}
}
start = input('start')
end = input('end')
required = input('via').split(',')
def find_all_paths(graph, start, end, path=[]):
path = path + [start]
if start == end:
return [path]
if not start in graph:
return []
paths = []
for node in graph[start]:
if node not in path:
newpaths = find_all_paths(graph, node, end, path)
for newpath in newpaths:
paths.append(newpath)
return paths
def exists_in_graph(graph, nodes):
for node in nodes:
if not node in graph:
return False
return True
allPaths = find_all_paths(graph1, start, end)
allPathsTroughNodes = list(filter(lambda x: exists_in_graph(x, required),
allPaths))
print(allPathsTroughNodes)
출력 :
start e
end k
via a,c,d
[['e', 'a', 'b', 'c', 'd', 'k'], ['e', 'a', 'b', 'd', 'c', 'k'], ['e', 'a',
'c', 'b', 'd', 'k'], ['e', 'a', 'c', 'd', 'b', 'k'], ['e', 'a', 'c', 'd',
'k'], ['e', 'a', 'd', 'b', 'c', 'k'], ['e', 'a', 'd', 'c', 'b', 'k'], ['e',
'a', 'd', 'c', 'k'], ['e', 'b', 'a', 'c', 'd', 'k'], ['e', 'b', 'a', 'd',
'c', 'k'], ['e', 'b', 'c', 'a', 'd', 'k'], ['e', 'b', 'c', 'd', 'a', 'k'],
['e', 'b', 'd', 'a', 'c', 'k'], ['e', 'b', 'd', 'c', 'a', 'k'], ['e', 'c',
'a', 'b', 'd', 'k'], ['e', 'c', 'a', 'd', 'b', 'k'], ['e', 'c', 'a', 'd',
'k'], ['e', 'c', 'b', 'a', 'd', 'k'], ['e', 'c', 'b', 'd', 'a', 'k'], ['e',
'c', 'd', 'a', 'b', 'k'], ['e', 'c', 'd', 'a', 'k'], ['e', 'c', 'd', 'b',
'a', 'k'], ['e', 'd', 'a', 'b', 'c', 'k'], ['e', 'd', 'a', 'c', 'b', 'k'],
['e', 'd', 'a', 'c', 'k'], ['e', 'd', 'b', 'a', 'c', 'k'], ['e', 'd', 'b',
'c', 'a', 'k'], ['e', 'd', 'c', 'a', 'b', 'k'], ['e', 'd', 'c', 'a', 'k'],
['e', 'd', 'c', 'b', 'a', 'k']]
그러나 내가 발견 된 각 경로의 길이를 계산할 수 있습니다 나는이 중 가장 짧은 하나를 얻을 수있는 방법을 어떻게 단서가 없다.