拓扑排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int MAXN=1000+10;
int c[MAXN], n;
int topo[MAXN], t;
int G[MAXN][MAXN];
bool dfs(int u)
{
c[u]=-1;
for(int v=0;v<n;v++){
if(G[u][v]){
if(c[v]<0){
return false;
}
else if(!c[v]&&!dfs(v)){
return false;
}
}
}
c[u]=1;
topo[--t]=u;
return true;
}
bool topoSort()
{
t=n;
memset(c,0,sizeof(c));
for(int u=0;u<n;u++){
if(!c[u]){
if(!dfs(u)){
return false;
}
}
}
return true;
}
int main()
{
int m,a,b;
char sym;
scanf("%d%d",&n,&m);
memset(G,0,sizeof(G));
for(int i=0;i<m;i++){
scanf("%d %c %d",&a,&sym,&b);
if(sym=='<'){
G[a][b]=1;
}
else{
G[b][a]=1;
}
}
if(topoSort()){
for(int i=0;i<n;i++){
printf("%d ",topo[i]);
}
printf("\n");
}
else{
printf("-1\n");
}
return 0;
}