拓扑排序

来源:互联网 发布:淘宝联盟怎么买东西 编辑:程序博客网 时间:2024/06/06 08:31
#include<algorithm>#include<cstdio>#include<iostream>#include<memory.h>#define maxn 3001int c[maxn],topo[maxn],g[maxn][maxn],t,n,m,v;bool dfs(int u){    c[u]=-1;//标记为-1,表示正在访问(即dfs(u)在栈帧中,尚未返回)     for(int v=1;v<=n;v++)        if(g[u][v]==1)            {                if(c[v]==-1) return false; //判断是否为DAG,如果不是则退出      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=1;u<=n;u++) if(!c[u]&&!dfs(u))  return false;return true;}int main(){scanf("%d%d",&n,&m);for (int i=1;i<=m;i++) {int x,y;scanf("%d%d",&x,&y);g[x][y]=1;}if (!toposort()) printf("No Topology\n");  else for (int i=1;i<=n;i++) printf("%d ",topo[i]);    printf("\n");return 0;}

0 0
原创粉丝点击