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

Python提取矩阵非零元素索引调用addEdge添加边的代码修正

邻接矩阵非零坐标提取代码修正

原有代码问题

  • 语法问题:Python强制要求缩进,原代码循环、判断分支内的代码没有正确缩进,运行会直接报语法错误
  • 逻辑问题1:li_r、li_c初始化位置放在了行遍历循环内部,每遍历新的一行就会清空之前存储的索引,最终只能保留最后一行的非零坐标
  • 逻辑问题2:最后调用g.addEdge时使用两层嵌套循环,会将所有行索引和列索引做无差别配对,生成大量不存在的错误坐标,无法得到预期的一一对应坐标对
  • 前置代码问题:最初的邻接矩阵创建代码使用了未定义的ROWS、COLUMNS变量,且行列表追加位置错误,会生成结构异常的矩阵

修正后完整代码

1. 正确初始化n阶邻接矩阵

n = int(input())
adjacency_matrix = []
for i in range(n):
    current_row = []
    for j in range(n):
        current_row.append(int(input()))
    adjacency_matrix.append(current_row)

2. 提取非零坐标并调用方法

最简洁的实现不需要单独存储两个索引列表,遍历到非零元素时直接传参调用即可,完全避免索引配对错误:

for row_idx in range(n):
    for col_idx in range(n):
        if adjacency_matrix[row_idx][col_idx] != 0:
            g.addEdge(row_idx, col_idx)

如果需要保留li_r、li_c两个列表存储索引,使用如下写法:

# 列表初始化必须放在所有循环外部
li_r = []
li_c = []
for row_idx in range(n):
    for col_idx in range(n):
        if adjacency_matrix[row_idx][col_idx] != 0:
            li_r.append(row_idx)
            li_c.append(col_idx)

# 按索引顺序一一配对,不要嵌套循环
for i in range(len(li_r)):
    g.addEdge(li_r[i], li_c[i])

运行效果验证

用给出的n=3测试矩阵运行代码:

adjacency_matrix = [
    [2,3,0],
    [0,0,1],
    [1,5,0]
]

最终得到li_r = [0,0,1,2,2]、li_c = [0,1,2,0,1],会按顺序执行如下调用,和预期完全一致:

g.addEdge(0,0)
g.addEdge(0,1)
g.addEdge(1,2)
g.addEdge(2,0)
g.addEdge(2,1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:46:00