求有向图G中各顶点的入度与出度。建议分别采用邻接矩阵和邻接表这两种不同的存储结构完成。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试第一行输入2个整数n、m(2≤n≤26,1≤m≤n(n-1)/2),分别表示顶点数、边数;然后输入m行,每行包含两个顶点Ai、Bi(大写字母表示),表示Ai到Bi有一条有向边。 输出格式: 对于每组测试,输出n行,依顶点的字典序在每行上输出各顶点的入度和出度(数据之间留一个空格)。
时间: 2023-11-28 07:50:23 浏览: 145
求有向图所有顶点的出度与入度
5星 · 资源好评率100%
邻接矩阵实现代码:
```python
T = int(input()) # 测试数据组数
for _ in range(T):
n, m = map(int, input().split())
# 初始化邻接矩阵
adj_matrix = [[0] * n for _ in range(n)]
for _ in range(m):
a, b = input().split()
i, j = ord(a) - 65, ord(b) - 65 # 将字母转换为数字下标
adj_matrix[i][j] = 1 # 记录有向边
# 输出每个节点的入度和出度
for i in range(n):
indegree = 0
outdegree = 0
for j in range(n):
if adj_matrix[i][j] == 1:
outdegree += 1
if adj_matrix[j][i] == 1:
indegree += 1
print(chr(i + 65), indegree, outdegree)
```
邻接表实现代码:
```python
T = int(input()) # 测试数据组数
for _ in range(T):
n, m = map(int, input().split())
# 初始化邻接表
adj_list = [[] for _ in range(n)]
for _ in range(m):
a, b = input().split()
i, j = ord(a) - 65, ord(b) - 65 # 将字母转换为数字下标
adj_list[i].append(j) # 记录有向边
# 输出每个节点的入度和出度
for i in range(n):
indegree = 0
outdegree = len(adj_list[i])
for j in range(n):
if i != j and i in adj_list[j]:
indegree += 1
print(chr(i + 65), indegree, outdegree)
```
阅读全文