我正在为我的学校机器人团队做一个项目。我需要找到一种方法来找到起点,三个停车场和一个终点之间的最短路线。这就是我到目前为止所做的:
d = {'A': ['B'], #Block1
'B': ['R', 'C', 'D', 'E', 'F', 'G', 'X' 'H'],
'C': ['D', 'E', 'F', 'G', 'X', 'H'],
'D': ['I', 'Q', 'P', 'O', 'E', 'F', 'G', 'X', 'H'],
'E': ['F', 'Q', 'G', 'X', 'H'],
'F': ['Q', 'P', 'G', 'X', 'H'],
'G': ['Q', 'O', 'I', 'X', 'H'],
'H': ['V', 'I'],
'I': ['J', 'K', 'L', 'M', 'N', 'W'],
'J': ['K', 'L', 'M', 'N', 'W', 'P', 'H', 'G'],
'K': ['L', 'M', 'N', 'W', 'O', 'P', 'Q', 'f'],
'L': ['M', 'N', 'W', 'O', 'P', 'Q', 'E'],
'M': ['N', 'W', 'O', 'T', 'P', 'Q', 'D'],
'N': ['W', 'O', 'Q', 'C'],
'O': ['D', 'L', 'K', 'J', 'G'],
'P': ['G', 'F', 'K', 'L', 'D', 'M', 'Z'],
'Q': ['N', 'S', 'M', 'D', 'L', 'E', 'K', 'U', 'F', 'J', 'G', 'H'],
'R': ['B'], #Parking Lot
'S': ['Q'], #Parking Lot
'T': ['M'], #Parking Lot
'U': ['Q'], #Parking Lot
'V': ['H'], #Parking Lot
'W': ['A'],
'X': ['H'], #block2
'Z': ['Q']}
def find_shortest_path(d, start, end, path=[]):
path = path + [start]
if start == end:
return path
if not d.has_key(start):
return None
shortest = None
for node in d[start]:
if node not in path:
newpath = find_shortest_path(d, node, end, path)
if newpath:
if not shortest or len(newpath) < len(shortest):
shortest = newpath
return shortest
x = find_shortest_path
现在,它能够从头到尾绘制一条路径,现在我需要让它停在三个指定的位置。不过,我不知道该怎么做。我可以使用任何帮助,或者如果您有任何改进我的代码的建议。我知道它可能很乱,但我只是需要它才能工作。谢谢!
答案 0 :(得分:1)
如您所知,如何找到介于两者之间的路 两点,你可以用它来找到从起点到的方式 第一个特定点,然后从那里到下一个等。
如果你不知道访问这三个地点的最佳顺序和 在所有情况下都需要最短的方式,你可以尝试所有3!= 3 * 2 * 1 = 6种组合,然后选择最短的。
答案 1 :(得分:0)
另一个建议是添加一个停靠列表(称之为A)作为输入并运行测试以查看它们是否全部到达,然后继续执行其余的find_shortest_path。一个这样的测试可能是将到达的所需停靠点添加到列表中(称之为B),并在继续执行find_shortest_path()定义的第3行之前检查是否B = A.