Итак, у меня есть четыре линии поезда, представленные в виде списков:
line1 = ["a", "b", "f", "d", "e"]
line2 = ["c", "e", "j", "g", "i"]
line3 = ["c", "j", "k", "l", "m"]
line4 = ["h", "b", "e", "a", "n"]
По сути, каждая буква служит станцией. Если станция появляется на нескольких линиях, вы можете переходить с одной линии на другую, подобно многим подземным городским транспортным системам. Например, кратчайший путь от a до h будет [a, b, h], потому что вы можете перейти от a к b в строке 1, перейти к строке 4, а затем перейти от b к h.
Я хочу найти простой способ найти кратчайший путь с учетом пункта отправления и пункта назначения. Мое текущее решение - преобразовать линии в график, найдя соседние станции станции и связав их с этой станцией.
stations = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"]
allLines = [line1, line2, line3, line4]
nodeGraph = {}
def getList(letter):
neighbors = []
for i in allLines:
if letter in i:
pos = i.index(letter)
if pos == 0:
neighbors.append(i[pos+1])
elif pos == len(i) - 1:
neighbors.append(i[pos-1])
elif pos > 0 and pos < len(i) - 1:
neighbors.append(i[pos-1])
neighbors.append(i[pos+1])
return neighbors
for station in stations:
nodeGraph[station] = getList(station)
Затем я нашел функцию кратчайшего пути на этом веб-сайте, которая выводит кратчайший путь из ввод графа.
def SP(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
shortest = None
for node in graph[start]:
if node not in path:
newpath = SP(graph, node, end, path)
if newpath:
if not shortest or len(newpath) < len(shortest):
shortest = newpath
return shortest
Я хочу полностью избежать этапа создания графика и получить кратчайший путь только из четырех списков. Кто-нибудь может мне помочь?