#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<stack>
#include<cmath>
using namespace std;
const int M=1005;
struct linklist
{
int s;
linklist *next;
};
linklist map[M];
int co[M];
stack<int>s;
int a[M];
int n, m;
int tj=0;
void toposort()
{
int nn=0;
for (int i=1; i<=n; i++)
{
if (!co[i]) s.push(i);
}
if (s.empty()){
printf("No sort\n");
return;
}
else
{
while (!s.empty())
{
tj++;
int v=s.top();
a[++nn]=v;
s.pop();
for (linklist *i=map[v].next; i!=NULL; i=i->next)
{
co[i->s]--;
if(!co[i->s]) s.push(i->s);
}
}
}
}
void insert(linklist &x, int y)
{
linklist *t;
t=new(linklist);
t->s=y;
t->next=x.next;
x.next=t;
}
void init()
{
memset(co, 0, sizeof(co));
memset(map, 0, sizeof(map));
for (int i=1; i<=n; i++)
{
map[i].s=i;
map[i].next=NULL;
}
scanf("%d %d", &n, &m);
for (int i=1; i<=m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
insert(map[x], y);
co[y]++;
}
}
int main()
{
init();
//debug();
toposort();
if (tj<n) {
printf("No sort\n");
}
else
{
for (int i=1; i<=n; i++)
printf("%d ", a[i]);
}
return 0;
}
拓扑排序
最新推荐文章于 2025-05-13 21:35:52 发布