QAQYuYang274810 2022-04-29 04:33 采纳率: 50%
浏览 204
已结题

尽快,求解以下问题如图中第五题的程序要求,文件夹压缩包的形式发我,最好于4月30号中午12点前发我

求解最短路径
提供算法思想描述,程序结构,测试结果

设有n(n> 10)个城市之间的交通图。假设任意两个城市之间不一定有直接交通线路,权表示乘车时间。要求事先将交通图信息将存人磁盘文件中,求从某城市出发到其他城市的最少乘车时间和乘车路线。要求将结果以图形方式在屏幕上输出。

img

  • 写回答

3条回答 默认 最新

  • 溪风沐雪 2022-04-29 10:43
    关注

    你这个问题就是一个加权无向图的最小路径求解的问题,我给个例子你参考一下,直接用现成的算法实现的,代码并不复杂,看看是否符合你的要求:

    import matplotlib.pyplot as plt
    import networkx
    
    G2 = networkx.Graph()  # 创建:空的 无向图
    #创建加权边,a、b、c等代表城市,后边的值代表乘车时间
    edges = [("a", "b", 5), ("a", "c",13), ("a", "e",10),("a", "g", 6), 
            ("a", "i", 5),("a", "k", 6),("a", "l", 2), ("a", "m", 5),
            ("b", "c", 3), ("b", "i", 1),("c", "d", 9), ("d", "e",11),
            ("e", "f", 9), ("f", "g", 6),("g", "h", 7), ("h", "i", 4),
            ("i", "j", 9), ("j", "k", 6),("k", "l", 7), ("l", "m", 4)]
    G2.add_weighted_edges_from(edges)  # 向图中添加多条赋权边: (node1,node2,weight)
    #指定要求解的两个点
    source = 'b'
    target = 'f'
    # 两个指定顶点之间的最短加权路径
    minWPath= networkx.dijkstra_path(G2, source=source, target=target)
    print(f"顶点 {source} 到 顶点 {target} 的最短加权路径: {minWPath}")
    # 两个指定顶点之间的最短加权路径的长度
    lMinWPath = networkx.dijkstra_path_length(G2, source=source, target=target)  #最短加权路径长度
    print(f"顶点 {source} 到 顶点 {target} 的最短加权路径长度: {lMinWPath}")
    
    pos = networkx.spring_layout(G2)  # 用 FR算法排列节点
    networkx.draw(G2, pos, with_labels=True, alpha=0.5) #画所有节点
    labels = networkx.get_edge_attributes(G2,'weight') #取加权值为标签
    networkx.draw_networkx_edge_labels(G2, pos, edge_labels = labels) #画边和标签
    posCopy = pos.copy()  #复制所有节点
    edgesCopy = [] #最小路径加权边
    #遍历所有节点,保留最小路径相关节点
    for k in pos.keys():
        if k not in minWPath:
            posCopy.pop(k)
    #遍历所有加权边,取出最小路径相关加权边
    for i in range(len(minWPath)-1):
        for edge in edges:
            if minWPath[i] in edge and  minWPath[i+1] in edge:
                edgesCopy.append(edge)
                break
    minG2 = networkx.Graph() #创建空无向图
    minG2.add_weighted_edges_from(edgesCopy) #向图中添加最小路径加权边
    networkx.draw(minG2, posCopy, with_labels=False, alpha=1, edge_color='red')  #用红色标记最小路径边
    plt.show()
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 修改了问题 4月29日
  • 修改了问题 4月29日
  • 展开全部

悬赏问题

  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输