Программа кратчайшего пути Python

Я написал следующую программу, и есть 2 ‘ошибки’, которые я не знаю, как исправить. Входы b1, c1, d1 и e1 соответствуют точкам и смежным узлам.
Например, если я дам input: A B C, это означает, что из точки A можно перейти в B и C. вход f1 соответствует начальной и конечной точке. Например, если я дам ввод: A D, это означает, что вы начинаете в точке A и хотите закончить в точке D.

b1 = input() 
c1 = input()
d1 = input()
e1 = input()
f1 = input()
b = b1.split()
c = c1.split()
d = d1.split()
e = e1.split()
f = f1.split()
b_node = b[1:]
c_node = c[1:]
d_code = d[1:]
e_node = e[1:]
f_node = f[1:]

G = {b[0]:b_node, c[0]:c_node, d[0]:d_node, e[0]:e_node}

def find_path(graph, start, end, path = []):
    path = path + [start]
    newpath = []
    if start == end:
        return path
    shortest = None
    for node in graph[start]:
        if node not in path:
            newpath = find_path(graph, node, end, path)
            if newpath:
                if not shortest or len(newpath)<len(shortest):
                    shortest = newpath
    return shortest
print(find_path(G, f[0], f[1]))

Я даю моей программе следующие входные данные

A B C
B A C
C B D
D
A D

Мои вопросы следующие:
1. Моя программа выдает ошибку, потому что d_node = [] (пустой). Однако это
предполагается, что так, так как из точки D, вы не можете путешествовать в любую точку! Как сделать так, чтобы он работал правильно?
2. Есть ли способ позволить моей программе попросить число’ N ‘ точек, а затем дать мне N строк, чтобы дать для этих точек всю смежную информацию? Я попробовал что-то из формы

input_list = []
x = int(input())
for i in range(x):
    input_list.append(input())

Но не смог заставить его работать.. Есть идеи?

1 ответ

  1. 1:
    У вас есть опечатка для «d_node», как вы написали «d_code».

    2:
    Попробуйте с while-loop; продолжить, если вы вводите пустую строку (которая будет означать, что вы закончили ввод точек). Что-то вроде:

    while True:
        i = input()
        if not i:
            break