邻接表拓扑排序算法C语言
时间: 2023-12-13 14:34:32 浏览: 90
图的邻接表实现迪杰斯特拉算法(C语言).doc
5星 · 资源好评率100%
以下是邻接表拓扑排序算法的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXV 1000
typedef struct node {
int v;
struct node *next;
} Node;
Node *adj[MAXV];
int in_degree[MAXV];
void add_edge(int u, int v) {
Node *p = (Node *)malloc(sizeof(Node));
p->v = v;
p->next = adj[u];
adj[u] = p;
}
void top_sort(int n) {
int i, j;
Node *p;
for (i = 0; i < n; i++) {
for (p = adj[i]; p != NULL; p = p->next) {
in_degree[p->v]++;
}
}
for (i = 0; i < n; i++) {
if (in_degree[i] == 0) {
printf("%d ", i);
in_degree[i]--;
for (p = adj[i]; p != NULL; p = p->next) {
in_degree[p->v]--;
}
i = -1;
}
}
}
int main() {
int n, m, i, u, v;
scanf("%d%d", &n, &m);
for (i = 0; i < m; i++) {
scanf("%d%d", &u, &v);
add_edge(u, v);
}
top_sort(n);
return 0;
}
```
阅读全文