假设有向图g采用邻接表存储,设计一个算法求出图g每个顶点的入度,用C语言写
时间: 2024-03-18 19:40:17 浏览: 80
讨论如何在计算机中实现?-C语言数据结构课件【比较清晰】
可以使用C语言实现上述算法,具体代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
typedef struct node {
int val;
struct node* next;
} Node;
int in_degree[MAX_N];
Node* create_node(int val) {
Node* node = (Node*) malloc(sizeof(Node));
node->val = val;
node->next = NULL;
return node;
}
void add_edge(Node** adj_list, int u, int v) {
Node* node = create_node(v);
node->next = adj_list[u];
adj_list[u] = node;
}
void get_in_degree(Node** adj_list, int n) {
for (int u = 0; u < n; u++) {
Node* cur = adj_list[u];
while (cur != NULL) {
int v = cur->val;
in_degree[v]++;
cur = cur->next;
}
}
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
Node* adj_list[MAX_N] = {0};
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
add_edge(adj_list, u, v);
}
get_in_degree(adj_list, n);
for (int u = 0; u < n; u++) {
printf("in_degree[%d] = %d\n", u, in_degree[u]);
}
return 0;
}
```
其中,Node结构体表示邻接表中的一个节点,包括节点值val和指向下一个节点的指针next。create_node函数创建一个新节点,add_edge函数将一条边从u连向v,get_in_degree函数计算每个顶点的入度,最后在main函数中输出每个顶点的入度。
阅读全文