📜  打印有向图的邻接表(1)

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

打印有向图邻接表

邻接表是有向图最常用的表示方式之一。对于一个有向图,每个节点都对应了一个链表,链表中记录了与该节点相邻的节点。用邻接表表示有向图的优势在于,可以快速地查找某个节点指向的其他节点,同时也可以轻松地进行节点的添加和删除操作。

下面是一个用邻接表表示的有向图的示例图:

graph

假设我们已经用一个二维数组adj表示了图的邻接关系,其中adj[i][j]表示节点i是否指向节点j,如果是,则adj[i][j]=1,否则adj[i][j]=0

下面的代码片段展示了如何将这个二维数组表示的图转换为邻接表,并打印出来:

n = len(adj) # 节点数
adj_list = [[] for _ in range(n)] # 初始化邻接表

for i in range(n):
    for j in range(n):
        if adj[i][j] == 1:
            adj_list[i].append(j) # 将i指向的节点j添加到i的邻接表中

# 打印邻接表
for i in range(n):
    print(f"{i}: ", end="")
    for j in adj_list[i]:
        print(f"{j} ->", end="")
    print("")

该代码片段首先初始化了一个包含n个空链表的列表(也就是邻接表),然后遍历二维数组,将每个节点指向的其他节点添加到对应的链表中。最后,遍历邻接表打印出每个节点的邻接节点列表。

输出结果为:

0: 1 ->3 ->
1: 2 ->
2: 4 ->
3: 1 ->4 ->
4:

在这个例子中,节点0的邻居节点是节点1和节点3,节点1的邻居节点是节点2,节点2的邻居节点是节点4,而节点3的邻居节点是节点1和节点4,节点4没有邻居节点。

通过这个例子,我们可以看到,用邻接表表示有向图是非常方便的,而打印邻接表也是很简单的。只需要遍历每个节点的邻接链表,将其中的节点依次打印出来即可。