📜  如何将邻接列表转换为邻接矩阵 - Python (1)

📅  最后修改于: 2023-12-03 15:09:08.147000             🧑  作者: Mango

如何将邻接列表转换为邻接矩阵 - Python

概述

邻接列表和邻接矩阵是表示图的常用方法。邻接列表是以节点为索引的列表,每个节点再对应一个节点列表,表示与该节点相连的节点。而邻接矩阵是一个方阵,其中的每个值表示两个节点之间是否存在一条边。邻接矩阵相比邻接列表有更快的查询速度,但需要更多的空间。

本文介绍如何将邻接列表转换为邻接矩阵,以便于在代码中使用邻接矩阵的优势。

将邻接列表转换为邻接矩阵

以下为Python代码,将邻接列表转换为邻接矩阵:

def adj_list_to_matrix(adj_list):
    """
    将邻接列表转换为邻接矩阵
    :param adj_list: 邻接列表,格式为字典,key为节点,value为相邻节点列表
    :return: 邻接矩阵,格式为二维列表,每个元素为0或1
    """
    nodes = sorted(adj_list.keys())
    n = len(nodes)
    matrix = [[0]*n for _ in range(n)]
    for i in range(n):
        node = nodes[i]
        neighbors = adj_list[node]
        for neighbor in neighbors:
            j = nodes.index(neighbor)
            matrix[i][j] = 1
            matrix[j][i] = 1
    return matrix

其中,adj_list为邻接列表,格式为字典,key为节点,value为相邻节点列表。nodes为邻接列表中所有的节点,按照字典序排序。n为节点数目。matrix为邻接矩阵,先将所有元素初始化为0。接着从第一个节点开始遍历,对于每个节点,将其与相邻节点的邻接矩阵位置设为1。由于邻接矩阵是对称的,所以需要同时修改两个方向上的位置。

结论

邻接列表和邻接矩阵各有优缺点,可以根据实际情况灵活使用。当需要进行频繁的节点查询时,邻接矩阵相比邻接列表更加适用。将邻接列表转换为邻接矩阵的方法简单易懂,是代码实现的重要基础之一。