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

NetworkX使用add_edges_from()添加单向边的实现方法及问题解决

解决方法

核心问题修正

你当前遇到的边方向被反转、无法区分单向/双向边的根本原因是:你使用了无向图类nx.Graph(),无向图会自动忽略边的方向,把(u,v)和(v,u)视为同一条边,直接覆盖属性。你只需要把图实例替换为有向图类nx.DiGraph(),即可严格保留边的方向和独立容量属性。

适配后的完整代码

你原有的边列表已经完全符合你的需求:

  • 要求的单向边RIC->MAR、VB->RIC、VB->WDC,列表中仅存在正向定义,无反向边
  • 要求的双向边(RIC-NCA、NCA-VB)列表中同时包含正反两条边,且各自设置了不同容量
    直接替换图类即可正常运行:
import networkx as nx
# 仅需把nx.Graph()改为nx.DiGraph(),边列表无需调整
D = nx.DiGraph()
edges= [('CD', 'MAR', {'capacity': 200}), 
        ('CD', 'RIC', {'capacity': 200}), 
        ('CD', 'NCA',{'capacity': 150}), 
        ('RIC', 'NCA', {'capacity': 145}), 
        ('NCA', 'RIC', {'capacity': 125}), 
        ('RIC', 'MAR', {'capacity': 100}), 
        ('RIC', 'WDC', {'capacity': 230}), 
        ('NCA', 'WDC', {'capacity': 100}), 
        ('VB', 'RIC', {'capacity': 275}), 
        ('MAR', 'WDC', {'capacity': 150}), 
        ('NCA', 'VB', {'capacity': 200}), 
        ('VB', 'NCA', {'capacity': 175}), 
        ('VB', 'WDC', {'capacity': 50})]
D.add_edges_from(edges)
print('Number of Nodes:',D.number_of_nodes())
print('Nodes:', list(D.nodes))
print('Number of Edges',D.number_of_edges())
# 优化边遍历写法,避免索引顺序不一致导致的属性匹配错误
for u, v, attr in D.edges(data=True):
    print('Edge:', u, '->', v, '属性:', attr)
maxflow=nx.maximum_flow(D,'CD','WDC')
print('Flow from each node (From Node: {Node receiving: Flow})')
for key in maxflow[1]:
    print(key, ' : ', maxflow[1][key])

效果验证

替换为有向图后:

  • 单向边仅存在指定方向的路径,不会出现反向流
  • 双向边的两个方向容量独立,计算最大流时会分别统计
  • 不会再出现边方向自动反转的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:48:03