拓扑排序C语言算法实现
时间: 2023-11-26 22:48:45 浏览: 169
拓扑排序(C语言实现)
以下是拓扑排序的C语言算法实现:
```c
#include <stdio.h>
#define MAXN 1000
int n, m; // n表示结点数,m表示边数
int head[MAXN], ver[MAXN], nxt[MAXN], tot; // 邻接表存图
int d[MAXN]; // d[i]表示点i的入度
int q[MAXN], hh, tt; // 队列
void add(int x, int y) // 添加一条边x->y
{
ver[++tot] = y;
nxt[tot] = head[x];
head[x] = tot;
d[y]++;
}
int topsort() // 如果存在拓扑排序,返回1;否则返回0
{
hh = 0, tt = -1;
for (int i = 1; i <= n; i++)
if (!d[i])
q[++tt] = i;
while (hh <= tt)
{
int x = q[hh++];
for (int i = head[x]; i; i = nxt[i])
{
int y = ver[i];
if (--d[y] == 0)
q[++tt] = y;
}
}
return tt == n - 1;
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
add(x, y); }
if (topsort())
printf("存在拓扑排序\n");
else
printf("不存在拓扑排序\n");
return 0;
}
```
阅读全文