#include<stdio.h>
#include<stdlib.h>
int map[501][501];
int main()
{
int stack[502];
int size = 0;
int topo[501];
int indegree[501]={0};
int n,m,s,e,l;
int top;
int num = 0;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&s,&e,&l);
map[s][e] = l;
indegree[e]++;
}
for(int i=1;i<=n;i++)
{
if(indegree[i]==0)
stack[++size] = i;
}
while(size>=1)
{
top = stack[size];
size--;
topo[++num] = top;
for(int i=1;i<=n;i++)
{
if(map[top][i])
{
indegree[i]--;
if(indegree[i]==0)
stack[++size] = i;
}
}
}
if(num<n)
{
printf("no circle");
}
else
for(int i=1;i<=num;i++)
printf("%d ",topo[i]);
return 0;
}
/*/
6 8
1 3 1
1 2 1
1 4 1
3 2 1
3 5 1
4 5 1
6 4 1
6 5 1
/*/
算法笔记14:拓扑排序
最新推荐文章于 2022-03-16 20:52:59 发布