Поверьте, проблема заключалась в том, что вы не преобразовывали ввод в числа (т.е. веса оставались строками).
Попробуйте следующее.
Код
from dijkstar import find_path, Graph
input_file = input('Input the file name: ')
with open(input_file, 'r') as file:
graph = Graph() # place closer to where first used
for line in file:
line = line.rstrip() # remove trailing '\n'
w = list(map(int, line.split())) # convert line to list of ints
graph.add_edge(w[0], w[1], w[2]) # add edge with weights
print(w[0], w[1], w[2])
print(find_path(graph, 1, 4))
Вход
file.txt
1 2 1000
2 3 2000
3 4 3000
1 4 4000
Выход
PathInfo(nodes=[1, 4], edges=[4000], costs=[4000], total
_cost=4000)
Комментарии
Нет необходимости объявлять w как список или очищать его между использованием
w = list() # no need
w.clear() # no need
Вы должны почти всегда удалять завершающий '\ n' при повторении над файлом
line = line.rstrip()
Это неэффективный способ размещения элементов в w
for word in line.split():
w.append(word)
Проще просто назначать напрямую.
w = line.split()
Однако w будет быть заполненным строками, поэтому необходимо сопоставить с целыми числами.
w = list(map(int, line.split()))
Переменная i не используется (или не требуется), поэтому удалите.
i = 0