杭电1285

来源:互联网 发布:老mac升级系统 编辑:程序博客网 时间:2024/05/22 17:43

今天学习拓扑,恩,从水题开始。。。

 

 

#include<stdio.h>#include<string.h>int map[503][503],n,dg[503],ans[503];void tpsort(){int i,k,d;k=0;while(k<n){for(i=1;i<=n;i++)if(dg[i]==0)  //每次把入度为0 的边加到ans内,并删除i到各点的边;{dg[i]--;ans[k++]=i;for(d=1;d<=n;d++)if(map[i][d])dg[d]--;break;}}}int main (){int m,i,x,y;while(scanf("%d%d",&n,&m)!=EOF){memset(map,0,sizeof(map)); //map有边为1,无边为0;memset(dg,0,sizeof(dg)); //初始化入度为0;for(i=0;i<m;i++){scanf("%d%d",&x,&y);if(!map[x][y])//去重边?好吧,不加这就超时了。。。。。{map[x][y]=1;  //加入边dg[y]++;  //入度加1;}}tpsort(); //拓扑排序,结果在ans里;for(i=0;i<n-1;i++)printf("%d ",ans[i]);printf("%d\n",ans[i]);}return 0;}


 

原创粉丝点击