根据已有邻接矩阵构建无向图
时间: 2023-10-18 19:01:52 浏览: 92
邻接矩阵是一种表示图的方式,其中矩阵的行和列分别对应图中的顶点,矩阵中的值表示两个顶点之间是否有边相连。对于无向图,邻接矩阵是对称矩阵,因为对于任意一条边,它连接的两个顶点在矩阵中位置是相同的。
例如,下面是一个简单的无向图的邻接矩阵:
```
1 2 3 4
1 0 1 1 0
2 1 0 1 1
3 1 1 0 1
4 0 1 1 0
```
通过这个邻接矩阵可以构建出以下的无向图:
```
1--2--3
\ | /
\|/
4
```
在构建无向图时,我们可以从邻接矩阵中读取顶点和边的信息,然后构建图的数据结构。一种常见的数据结构是邻接表,其中每个顶点对应一个链表,链表中存储与该顶点相邻的所有顶点。在无向图中,对于每条边,我们需要在两个顶点的链表中都添加对方。
以下是使用邻接表表示上述无向图的代码:
```python
class Node:
def __init__(self, val):
self.val = val
self.next = None
class Graph:
def __init__(self, n, edges):
self.n = n
self.adj_list = [None] * n
for u, v in edges:
node1 = Node(v-1)
node1.next = self.adj_list[u-1]
self.adj_list[u-1] = node1
node2 = Node(u-1)
node2.next = self.adj_list[v-1]
self.adj_list[v-1] = node2
```
其中,`n`表示顶点个数,`edges`是一个包含边信息的列表,每个元素是一个长度为2的元组,表示一条边连接的两个顶点的编号。在构造函数中,我们首先创建一个长度为`n`的空列表`adj_list`,用于存储每个顶点的邻接表。然后对于每条边`(u, v)`,我们分别在顶点`u`和顶点`v`的邻接表中添加对方,即在`u`的邻接表中添加`v`,在`v`的邻接表中添加`u`。注意,这里我们将顶点编号从1开始,但在代码中需要将其转换为从0开始。
阅读全文