#include<stdio.h>
#include<vector>
#include<stack>
using namespace std;
vector<int> edg[100];
stack<int> s;
int main()
{
int n, m;
int rudu[100];
while (scanf("%d%d", &n, &m) != EOF)
{
if (n == 0 && m == 0)
break;
for (int i = 0; i < n; i++)
{
rudu[i] = 0;
edg[i].clear();
}
while (!s.empty())
s.pop();
for (int i = 0; i < m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
rudu[b]++;
edg[a].push_back(b);
}
for (int i = 0; i < n; i++)
if (rudu[i] == 0)
s.push(i);
int ans = 0;
while(!s.empty())
{
int temp = s.top();
s.pop();
ans++;
for (int j = 0; j < edg[temp].size(); j++)
{
int t = edg[temp][j];
rudu[t]--;
if (rudu[t] == 0)
s.push(t);
}
}
if (ans == n)
printf("无环\n");
else
printf("有环\n");
}
return 0;
}
利用拓扑排序判断一个图是否为无环图
最新推荐文章于 2022-01-14 12:16:57 发布