python 有向图求度数,第一行输入顶点数和边数,第二行输入顶点名,后面输入起点坐标,终点坐标,带权度数,求度数
时间: 2023-08-31 12:44:05 浏览: 110
### 回答1:
以下是一个按照你所描述的格式,求有向图中每个节点的入度和出度的示例代码:
```python
n, m = map(int, input().split()) # 顶点数和边数
vertices = input().split() # 顶点名
in_degree = {v: 0 for v in vertices} # 初始化每个节点的入度为 0
out_degree = {v: 0 for v in vertices} # 初始化每个节点的出度为 0
# 统计每个节点的入度和出度
for i in range(m):
start, end, weight = input().split()
out_degree[start] += 1
in_degree[end] += 1
# 输出结果
print("节点\t入度\t出度")
for v in vertices:
print(v, "\t", in_degree[v], "\t", out_degree[v])
```
输入示例:
```
6 8
A B C D E F
A B 1
A C 2
B C 3
B D 4
B E 5
C E 6
D F 7
E F 8
```
输出结果:
```
节点 入度 出度
A 0 2
B 1 3
C 2 2
D 1 1
E 2 1
F 2 0
```
其中,节点 A 的出度为 2,入度为 0,节点 B 的出度为 3,入度为 1,以此类推。
### 回答2:
要求解 Python 中有向图的度数问题,首先需要获取顶点数和边数。假设我们先输入了顶点数 n 和边数 m。
接下来,输入顶点名,假设用字符串数组 vertex_names 存储。
然后,输入 m 行数据,每行为起点坐标、终点坐标和带权度数。假设我们用一个二维列表 edges 存储这些信息。
要求解每个顶点的度数,可以通过创建一个长度为 n 的整数数组 degrees 来存储各个顶点的度数。初始化数组中的每个元素为 0。
然后,遍历 edges 列表,对于每条边 (start, end, weight),将起点 start 的度数加一。因为边是有向的,若起点是顶点 i,则 degrees[i] += 1。
遍历完 edges 列表后,就可以得到每个顶点的度数。
以下是一个示例代码:
``` python
# 输入顶点数和边数
n, m = map(int, input().split())
# 输入顶点名
vertex_names = input().split()
# 初始化 degrees 数组
degrees = [0] * n
# 输入边的信息
edges = []
for i in range(m):
start, end, weight = map(int, input().split())
edges.append([start, end, weight])
# 将起点的度数加一
degrees[start] += 1
# 输出每个顶点的度数
for i in range(n):
print(vertex_names[i], "的度数为", degrees[i])
```
以上代码可以求解所给有向图中每个顶点的度数,并输出结果。其中,度数的计算基于输入的边的信息。
### 回答3:
为了求解有向图的度数,首先需要根据输入的顶点数和边数来创建一个相应大小的邻接矩阵。然后,根据输入的顶点名,将每个顶点与其在邻接矩阵中的位置对应起来。接下来,对于每条边的起点和终点,我们需要在邻接矩阵中将相应的位置标记为1,表示存在一条有向边。
在求解带权度数时,我们需要将每条边的起点和终点在邻接矩阵中的位置找到,并根据带权度数的输入将相应的位置标记为权重值。具体的步骤如下:
1. 输入顶点数和边数,假设顶点数为n,边数为m。
2. 输入n个顶点名,并建立一个字典,将每个顶点名与其在邻接矩阵中的位置对应起来。
3. 创建一个大小为n×n的邻接矩阵,初始化每个元素为0。
4. 输入m条边的起点坐标、终点坐标和带权度数。对于每一条边的起点和终点,将邻接矩阵中对应位置的值标记为1,并将带权度数更新到该位置上。
5. 对于每个顶点,统计其在邻接矩阵中非零元素的个数,即为该顶点的出度。
6. 对于每个顶点,统计邻接矩阵中该列非零元素的个数,即为该顶点的入度。
最后,将得到的度数输出即可。
这个算法的时间复杂度为O(n^2+m),其中n为顶点数,m为边数。
阅读全文