Dijkstra python 库将值传递给 Graph 中的 add_edge
Dijkstra python library passing value to the add_edge in Graph
我正在尝试使用 Python 中的内置 Dijkstar 库并查询传递 add_edge 值。请帮忙。
from dijkstar import find_path, Graph
graph = Graph()
input_file = input('Input the file name')
w = list()
i = 0
with open(input_file, 'r') as file:
for line in file:
for word in line.split():
w.append(word)
graph.add_edge(w[0], w[1], w[2])
print(w[0], w[1], w[2])
i = 0
w.clear()
print(find_path(graph, 1, 4))
输入文件如下,它对 w[0]、w[1] 和 w[2] 工作正常
1 2 1000
2 3 2000
3 4 3000
1 4 4000
输出显示如下错误:
raise NoPathError('Could not find a path from {0} to {1}'.format(s, d))
dijkstar.algorithm.NoPathError: Could not find a path from 1 to 4
路径1到4有两种方式,那为什么会显示错误,没看懂。
如果我能得到任何帮助,那就太好了。
相信问题是你没有将输入转换为数字(即权重仍然是字符串)。
尝试以下方法。
代码
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
我正在尝试使用 Python 中的内置 Dijkstar 库并查询传递 add_edge 值。请帮忙。
from dijkstar import find_path, Graph
graph = Graph()
input_file = input('Input the file name')
w = list()
i = 0
with open(input_file, 'r') as file:
for line in file:
for word in line.split():
w.append(word)
graph.add_edge(w[0], w[1], w[2])
print(w[0], w[1], w[2])
i = 0
w.clear()
print(find_path(graph, 1, 4))
输入文件如下,它对 w[0]、w[1] 和 w[2] 工作正常
1 2 1000
2 3 2000
3 4 3000
1 4 4000
输出显示如下错误:
raise NoPathError('Could not find a path from {0} to {1}'.format(s, d))
dijkstar.algorithm.NoPathError: Could not find a path from 1 to 4
路径1到4有两种方式,那为什么会显示错误,没看懂。 如果我能得到任何帮助,那就太好了。
相信问题是你没有将输入转换为数字(即权重仍然是字符串)。
尝试以下方法。
代码
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