📅  最后修改于: 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号顶点相邻,以此类推。
通过以上代码实现,我们可以看到将邻接矩阵转换为邻接表表示是一件非常简单的任务。但是,在实际的算法中,我们会经常用到该转换方法,同时也需要注意一些细节问题,如无向图和有向图的不同处理方式等。