📜  将邻接矩阵转换为图的邻接表表示(1)

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

将邻接矩阵转换为图的邻接表表示

在图的表示中,邻接矩阵是一种常见的表示方法,但它存在着空间浪费的问题。相对而言,邻接表是一种更为紧凑的表示方式,也更适合在图搜索、遍历、拓扑排序等算法中使用。

将邻接矩阵转换为邻接表表示可以更好地发挥邻接表的优势。下面是具体的实现方法:

代码实现
class Graph:
    def __init__(self, matrix):
        self.v_count = len(matrix)
        self.adj_list = []
        for i in range(self.v_count):
            self.adj_list.append([])
            for j in range(self.v_count):
                if matrix[i][j] == 1:
                    self.adj_list[i].append(j)

上述代码定义了一个Graph类,其中matrix为邻接矩阵,v_count表示图的顶点数,adj_list则为转换后的邻接表。

在初始化函数中,我们首先对邻接表进行初始化,创建一个空列表,并用二重循环遍历邻接矩阵,将邻接矩阵中的值为1的位置转换为邻接表中的有向边。

示例

假设有如下邻接矩阵:

matrix = [[0, 1, 1, 0],
          [1, 0, 0, 1],
          [0, 1, 0, 1],
          [0, 0, 0, 1]]

我们可以通过上述代码将其转换为邻接表表示:

Graph(matrix).adj_list
[[1, 2], [0, 3], [1, 3], [3]]

上述结果表示0号顶点与1、2号顶点相邻,1号顶点与0、3号顶点相邻,以此类推。

总结

通过以上代码实现,我们可以看到将邻接矩阵转换为邻接表表示是一件非常简单的任务。但是,在实际的算法中,我们会经常用到该转换方法,同时也需要注意一些细节问题,如无向图和有向图的不同处理方式等。