我们知道如果以邻接矩阵的形式(元素为0/1、true/false,只表示关联与否)表示图结构的话,邻接矩阵的行和表示每一个顶点的出度,邻接矩阵的列和表示每一个顶点的入度。
如果不使用高级的 python 第三方的库(如 numpy),而仅使用 list,使用 list of lists 来表示邻接矩阵,该如何计算行和、列和(也即出度、入度)呢?
from random import randrange
n = 10
N = [[randrange(2) for _ in range(n)] for _ in range(n)]
# 随机 0-1 值构成的随机图
out_degrees = [0]*n
in_degrees = [0]*10
for i in range(n):
out_degrees[i] = sum(N[i])
for j in range(n):
for i in range(n):
in_degrees[j] += N[i][j]
# 注意入度的循环顺序,
# 固定列,遍历行
补充
充分发挥 Python 的语法特性,也即 list comprehension,这里提供一个更为简便的版本:
out_degrees = [sum(N[i]) for i in range(n)]
in_degrees = [sum([N[i][j] for i in range(n)]) for j in range(n)]