You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用NetworkX实现单源多目标(子串匹配节点)的路径查找

解决NetworkX单源多子串匹配目标的路径查找问题

步骤1:筛选匹配子串的目标节点

先从图中提取所有包含指定子串(如'IASW'、'IUPE')的节点,用列表推导式即可快速实现:

import networkx as nx

# 假设你已创建好图G
target_substrings = ['IASW', 'IUPE']
# 筛选所有包含任一目标子串的节点
target_nodes = [node for node in G.nodes() if any(sub in node for sub in target_substrings)]

步骤2:批量计算单源到目标节点的最短路径

针对多目标场景,有两种高效处理方式:

方式一:逐个遍历目标节点(适合小规模图)

循环每个筛选出的目标节点,调用nx.shortest_path,同时处理路径不存在的情况:

source_node = 'C0111'
path_results = {}

for target in target_nodes:
    if nx.has_path(G, source_node, target):
        path = nx.shortest_path(G, source_node, target)
        path_results[target] = path
    else:
        path_results[target] = "无可达路径"

# 输出结果
for node, path in path_results.items():
    print(f"从{source_node}到{node}的路径: {path}")

方式二:单源路径树优化(适合大规模图)

如果图节点数量较多,先调用nx.single_source_shortest_path获取源节点到所有可达节点的路径字典,再从中提取目标节点的路径,避免重复计算:

# 获取源节点到所有可达节点的路径集合
all_reachable_paths = nx.single_source_shortest_path(G, source_node)

# 提取目标节点对应的路径
optimized_path_results = {
    target: all_reachable_paths[target] 
    for target in target_nodes 
    if target in all_reachable_paths
}

# 补充无路径的节点记录
for target in target_nodes:
    if target not in optimized_path_results:
        optimized_path_results[target] = "无可达路径"

示例验证

用你给出的示例节点构建测试图,验证代码逻辑:

# 构建测试图
G = nx.Graph()
nodes = ['C0111', 'N6186', 'C5572', 'N6501', 'C0850-IASW-NO01', 'C1182-IUPE-NO01']
G.add_nodes_from(nodes)
# 添加示例边(根据你的实际边集调整)
G.add_edges_from([
    ('C0111', 'N6186'),
    ('N6186', 'C5572'),
    ('C5572', 'C0850-IASW-NO01'),
    ('C0111', 'N6501'),
    ('N6501', 'C1182-IUPE-NO01')
])

# 执行代码后会输出:
# 从C0111到C0850-IASW-NO01的路径: ['C0111', 'N6186', 'C5572', 'C0850-IASW-NO01']
# 从C0111到C1182-IUPE-NO01的路径: ['C0111', 'N6501', 'C1182-IUPE-NO01']

内容的提问来源于stack exchange,提问作者user36605

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:55:27