首页 > 编程语言 >[Python图论]在用图nx.shortest_path求解最短路径时,节点之间有多条边edge,会如何处理?

[Python图论]在用图nx.shortest_path求解最短路径时,节点之间有多条边edge,会如何处理?

时间:2024-09-04 17:50:00浏览次数:12  
标签:NetworkX Python 路径 edges nx edge Key 长度 节点

问: 在使用图求最短路径时,如果节点之间有多条路径,shortest_route = nx.shortest_path(G, source=start_node, target=end_node, weight='length')会如何处理,会自动选择最短那条吗?

# 输出图G各节点之间有多少条边edge,并给出其长度
Edges between 103928 and 25508583:共2条
Edge: 103928 -> 25508583, Key: 0, Length: 77.277
Edge: 103928 -> 25508583, Key: 1, Length: 112.16900000000001
Edges between 26630792 and 5521427550:共2条
Edge: 26630792 -> 5521427550, Key: 0, Length: 85.091
Edge: 26630792 -> 5521427550, Key: 1, Length: 88.07600000000001
Edges between 107876 and 107873:共2条
Edge: 107876 -> 107873, Key: 0, Length: 83.102
Edge: 107876 -> 107873, Key: 1, Length: 186.669

答:是的,nx.shortest_path 会自动选择权重最小的那条路径。

当你在 NetworkX 中使用 nx.shortest_path(G, source=start_node, target=end_node, weight='length') 时,它会根据你指定的权重(在这个例子中是 'length')找到源节点和目标节点之间权重最小的路径。

对于节点之间有多条路径的情况,NetworkX 会如下处理:

  • 如果两个节点之间有多条路径,例如 (u, v),NetworkX 会选择所有可能的路径,并根据你指定的权重属性(在这个例子中是 length)找到最小权重的路径。
  • 在你的例子中,每一对节点之间都有两条路径。NetworkX 会比较这两条路径的 length 属性,并选择长度最短的那条路径作为该节点对之间的最短路径。
  • 这个过程会在整个图上进行,直到找到从起点到终点的全局最短路径。

具体示例

以你的数据为例:

  1. 节点 103928 -> 25508583:

    • 第一条路径长度:77.277
    • 第二条路径长度:112.169
    • NetworkX 选择:77.277 长度的路径(Key: 0)
  2. 节点 26630792 -> 5521427550:

    • 第一条路径长度:85.091
    • 第二条路径长度:88.076
    • NetworkX 选择:85.091 长度的路径(Key: 0)
  3. 节点 107876 -> 107873:

    • 第一条路径长度:83.102
    • 第二条路径长度:186.669
    • NetworkX 选择:83.102 长度的路径(Key: 0)
  4. 节点 11767210 -> 12026764:

    • 第一条路径长度:219.545
    • 第二条路径长度:95.666
    • NetworkX 选择:95.666 长度的路径(Key: 1)

总结

  • NetworkX 的 shortest_path 函数会自动为你选择每对节点之间权重最小的路径。
  • 因此,你不需要手动指定哪条路径是最短的,NetworkX 会基于权重(如 length)自动做出选择。

输出图内各节点之间的边及其长度 代码:

# 输出图内各节点之间的边及其长度

import networkx as nx


# Get all the nodes in the graph
nodes = G.nodes()

# Iterate over all pairs of nodes
for u in nodes:
    for v in nodes:
        # Skip if u and v are the same node
        if u == v:
            continue

        # Get the edges between u and v
        edges = G.get_edge_data(u, v)
        
        # If there are no edges between u and v, skip to the next pair of nodes
        if edges is None:
            continue
        edges_count = len(edges.items())
        if edges_count >1:
          # Print the edges and their lengths
          print(f"Edges between {u} and {v}:共{edges_count}条")
          for key, data in edges.items():
              print(f"Edge: {u} -> {v}, Key: {key}, Length: {data['length']}")

 

标签:NetworkX,Python,路径,edges,nx,edge,Key,长度,节点
From: https://blog.csdn.net/weixin_45933029/article/details/141780358

相关文章

  • python_August(函数对象、功能选择)
    目录python中一切皆对象功能选择函数的嵌套功能选择增加内容版python中一切皆对象#python中一切皆对象#print(self_max)#<functionself_maxat0x0000020E4456CF28>#print(id(self_max))#print(type(self_max))#print(type([1,2]))#print(type(1))#print(type(......
  • python 绘制折线图包括设置字体折线粗细以及标题立方m等
    #!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Suyue@file:flyzhexian.py@time:2024/09/04@desc:"""importpandasaspdimportmatplotlibimportmatplotlib.pyplotaspltimportmatplotlib.tickerastickermatplot......
  • Python基础 5 - 类、对象、注解
    文章目录一、初识对象1、什么是面向对象?2、成员方法1)类的定义和使用2)成员方法的定义3、类和方法面向对象编程4、属性(成员变量)的赋值5、其他类内置方法1)__str__字符串方法2)__lt__小于符号比较方法3)__le__小于等于符号比较方法4)__eq__等于符号比较方法......
  • 基于ABC-BP人工蚁群优化BP神经网络实现数据预测Python实现
    在数据预测领域,传统的统计方法和时间序列分析在面对复杂、非线性的数据时往往力不从心。随着人工智能技术的快速发展,神经网络特别是BP(BackPropagation)神经网络因其强大的非线性映射能力,在预测领域得到了广泛应用。然而,BP神经网络也存在易陷入局部最优、收敛速度慢等问题。为了......
  • 安全:nginx安装modsecurity
    一,modsecurity官网:   官网:https://modsecurity.org/如图:   官方代码站:https://github.com/owasp-modsecurity/ModSecurity二,安装环境准备:1,安装依赖库:[root@localhostsource]#yuminstall-ygccmakepcre-devellibxml2libxml2-develcurl-develht......
  • 【Python篇】详细学习 pandas 和 xlrd:从零开始
    文章目录详细学习`pandas`和`xlrd`:从零开始前言一、环境准备和安装1.1安装`pandas`和`xlrd`1.2验证安装二、`pandas`和`xlrd`的基础概念2.1什么是`pandas`?2.2什么是`xlrd`?三、使用`pandas`读取Excel文件3.1读取Excel文件的基础方法代码示例:读取......
  • 【Python玩转GIS数据】专栏内容介绍
    文章目录专栏亮点......
  • python从入门到成神的系列教程(文末附20G资料)
    根据您的需求,我会对每个类目进行一些补充和详细说明。1、字面量字面量是直接在代码中书写的固定值,例如数值、字符串、布尔值等。在Python中,字面量可以直接出现在代码中,不需要额外的构造函数或者类型声明。常用数据类型类型描述示例数字(Number)包括整数、浮点数、复数-整......
  • 20240907_051745 python 正则表达式 常见元字符
    •.:匹配任意单个字符•\d:匹配数字(等价于[0-9])•\w:匹配字母、数字、下划线(等价于[a-zA-Z0-9_])•\s:匹配空格、制表符、换行符等空白字符•^:匹配开头•$:匹配结尾•*:匹配前面的字符零次或多次•+:匹配前面的字符一次或多次•?:匹配前面的字符零次或一次•[]:匹配方括......
  • 20240907_061745 python 正则表达式 re.match方法
    情况一从头匹配匹配成功的数据可以通过匹配的对象的group()方法获取关注一下匹配不成功的情况情况二从中间匹配......