Python加权图的邻接表邻接矩阵之转换


tags: Python GT

写在前面

应之前的评论, 这里给出加权图的邻接矩阵和邻接表的转换, 格式是按照networkx的格式来的.

注意这里的矩阵遵循: 自己跟自己距离为0, 不邻接的两个节点距离为inf, 但是在networkx中, 邻接矩阵中的inf都使用0来替代.

代码

"""
adjacent matrix <=> adjacent list
with weights
"""
from math import inf


def matrix2list(matrix):
    result = []
    N = len(matrix)
    for i in range(N):
        tmp1 = []
        for j in range(N):
            if matrix[i][j] and matrix[i][j] != inf:
                tmp1.append(((i, j), matrix[i][j]))
        result.extend(tmp1)
    return result


def list2matrix(table):
    N = 0
    # 找到结点数目
    for i in range(len(table)):
        N = max(*table[i][0], N)
    # 这里不能直接使用列表乘法
    ret = [[inf] * (N + 1) for _ in range(N + 1)]
    # 对角线置零
    for i in range(N + 1):
        ret[i][i] = 0
    # 开始赋值
    for (i, j), w in table:
        ret[i][j] = w
    return ret


matrix = [
    [0, 2, inf, inf, inf],
    [2, 0, inf, 3, 2],
    [inf, inf, 0, inf, 1],
    [inf, 3, inf, 0, 4],
    [inf, 2, 1, 4, 0]
]


tb = matrix2list(matrix)
print(tb)
for (i, j), k in tb:
    print((i, j), k, sep="\t\t")

tb1 = [((0, 1), 2), ((1, 0), 2), ((1, 3), 3), ((1, 4), 2),
       ((2, 4), 1), ((3, 1), 3), ((3, 4), 4), ((4, 1), 2),
       ((4, 2), 1), ((4, 3), 4)]

mat = list2matrix(tb1)
print(mat)
# [[0, 2, inf, inf, inf],
#  [2, 0, inf, 3, 2],
#  [inf, inf, 0, inf, 1],
#  [inf, 3, inf, 0, 4],
#  [inf, 2, 1, 4, 0]]

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zorchp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值