石原皮蛋子 2021-05-30 21:23 采纳率: 0%
浏览 59

Python出租车多条路径的有向图构建

想要构建一个出租车导航的有向图,有向图的节点之间的边有距离权重和时间权重,坐标为(距离,时间)。

先在txt中设置节点,然后将txt中的文本转为字典,最后再套进graph的有向图里,产生类似于“A→B→E,6”的结果。

但是我发现graph里的字母好像跟前面读进来的字母无法关联,也就没法计算路径。

有大神知道怎么改才好吗

  • 写回答

1条回答 默认 最新

  • weixin_47361975 2023-03-23 23:31
    关注

    在读入节点的时候,可以为每个节点指定一个唯一的标识符(例如节点名称),然后将节点的标识符与节点坐标对应存储在字典中。这样,在构建有向图时,就可以使用节点的标识符来表示边的起点和终点,而不是使用字母表示。下面是一个示例代码:

    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中,每一行包含起点、终点、距离、时间,以逗号分隔。
    
    
    评论

报告相同问题?