假设不带权有向图采用邻接表 G 存储,设计实现以下功能的算法: (1)求出图中每个顶点的入度。 (2)求出图中每个顶点的出度。 (3)求出图中出度为0的顶点数。
时间: 2025-01-01 09:37:21 浏览: 14
对于无权有向图的邻接表存储结构,我们可以设计如下的算法来实现这些功能:
(1) 求出图中每个顶点的入度:
- 对于每一个顶点 v,遍历其邻接表,每遇到一条指向 v 的边,就将对应的源节点的入度加一。因为邻接表通常是键值对的形式,键代表目标顶点,值是一个列表,包含了所有指向这个目标的边。所以可以在遍历时累加每个边的源节点的入度计数。
```python
def in_degree(G, vertex):
count = 0
for neighbor in G[vertex]:
count += 1
return count
# 遍历所有顶点计算入度
in_degrees = {v: in_degree(G, v) for v in G}
```
(2) 求出图中每个顶点的出度:
- 类似地,遍历每个顶点的邻接表,但是这次统计的是有多少条边从该顶点出发。
```python
def out_degree(G, vertex):
count = len(G[vertex]) # 由于邻接表每个元素对应一条边
return count
out_degrees = {v: out_degree(G, v) for v in G}
```
(3) 求出图中出度为0的顶点数:
- 只需遍历 `out_degrees` 字典,统计出度为 0 的顶点即可。
```python
isolated_vertices = [v for v, degree in out_degrees.items() if degree == 0]
number_of_isolated = len(isolated_vertices)
```
阅读全文