想要构建一个出租车导航的有向图,有向图的节点之间的边有距离权重和时间权重,坐标为(距离,时间)。
先在txt中设置节点,然后将txt中的文本转为字典,最后再套进graph的有向图里,产生类似于“A→B→E,6”的结果。
但是我发现graph里的字母好像跟前面读进来的字母无法关联,也就没法计算路径。
有大神知道怎么改才好吗
在读入节点的时候,可以为每个节点指定一个唯一的标识符(例如节点名称),然后将节点的标识符与节点坐标对应存储在字典中。这样,在构建有向图时,就可以使用节点的标识符来表示边的起点和终点,而不是使用字母表示。下面是一个示例代码:
import networkx as nx
# 读取节点信息并存储到字典中
nodes = {}
with open('nodes.txt', 'r') as f:
for line in f:
name, distance, time = line.strip().split(',')
nodes[name] = (float(distance), float(time))
# 构建有向图并添加边
G = nx.DiGraph()
with open('edges.txt', 'r') as f:
for line in f:
start, end, distance, time = line.strip().split(',')
G.add_edge(start, end, distance=float(distance), time=float(time))
# 计算最短路径并输出结果
start = 'A'
end = 'E'
path = nx.shortest_path(G, start, end, weight='distance')
distance = sum(G.edges[u, v]['distance'] for u, v in zip(path, path[1:]))
time = sum(G.edges[u, v]['time'] for u, v in zip(path, path[1:]))
print('->'.join(path), f'{distance:.2f} ({time:.2f})')
在这个示例代码中,我们假设节点信息存储在nodes.txt中,每一行包含节点名称、距离、时间,以逗号分隔。边的信息存储在edges.txt中,每一行包含起点、终点、距离、时间,以逗号分隔。