设计一个在邻接矩阵基础上统计出每一个结点的入度和出度的算法。2、设计一个由图的邻接矩阵转换成邻接表的算法。
时间: 2023-06-16 20:07:25 浏览: 212
1. 统计每个节点的入度和出度的算法:
(1)首先初始化每个节点的入度和出度为0;
(2)遍历邻接矩阵的每一行和每一列,如果邻接矩阵中第i行第j列的元素为1,则节点i的出度加1,节点j的入度加1;
(3)遍历完邻接矩阵后,所有节点的入度和出度就都被统计出来了。
2. 邻接矩阵转换成邻接表的算法:
(1)对于邻接矩阵中的每个节点i,创建一个链表Li,用于存储所有与节点i有边相连的节点;
(2)遍历邻接矩阵的每一行和每一列,如果邻接矩阵中第i行第j列的元素为1,则将节点j加入链表Li中;
(3)遍历完邻接矩阵后,所有节点的邻接链表就都被建立好了。
相关问题
邻接矩阵求无向图入度和出度算法代码用C语言实现
在C语言中,我们可以使用邻接矩阵来表示无向图,并计算每个顶点的入度(即指向该顶点的边的数量)和出度(即从该顶点出发的边的数量)。下面是一个简单的示例,假设`graph`是一个二维数组,表示邻接矩阵,其中`graph[i][j] = 1`表示顶点i和顶点j之间有边。
```c
#include <stdio.h>
#define V 5 // 图的顶点数
// 函数声明
void computeDegrees(int graph[V][V], int degrees[], int n);
int main() {
int graph[V][V] = { {0, 1, 0, 1, 0},
{1, 0, 1, 1, 1},
{0, 1, 0, 0, 1},
{1, 1, 0, 0, 1},
{0, 1, 1, 1, 0} }; // 示例邻接矩阵
int degrees[V]; // 存储入度和出度
for (int i = 0; i < V; i++) {
degrees[i] = 0; // 初始化所有顶点的入度和出度为0
}
computeDegrees(graph, degrees, V); // 调用函数计算
printf("顶点\t入度\t出度\n");
for (int i = 0; i < V; i++) {
printf("%d\t%d\t%d\n", i, degrees[i], degrees[i]); // 输出结果
}
return 0;
}
// 计算入度和出度的函数
void computeDegrees(int graph[V][V], int degrees[], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (graph[i][j] == 1) { // 如果有边连接
degrees[j]++; // 出度加一(因为边离开当前顶点)
degrees[i]++; // 入度加一(因为边进入当前顶点)
}
}
}
}
```
python制作一个邻接矩阵并求邻接矩阵中节点的入度、出度和度
以下是制作邻接矩阵并求节点入度、出度和度的Python代码:
```python
n = int(input()) # 输入顶点数
matrix = [] # 存储邻接矩阵
for i in range(n):
row = list(map(int, input().split()))
matrix.append(row)
# 计算每个节点的入度、出度和度
for i in range(n):
in_degree = 0 # 入度
out_degree = 0 # 出度
degree = 0 # 度
for j in range(n):
if matrix[i][j] == 1:
out_degree += 1
if matrix[j][i] == 1:
in_degree += 1
degree = in_degree + out_degree
print("节点{}的入度为{},出度为{},度为{}".format(i+1, in_degree, out_degree, degree))
```
以上代码首先输入顶点数n,然后输入n行邻接矩阵,将邻接矩阵存储在一个二维列表matrix中。接着,对于每个节点,遍历邻接矩阵,计算其入度、出度和度,并输出结果。
阅读全文