toj2892Task 拓扑排序——模板

来源:互联网 发布:空总激光美容中心 知乎 编辑:程序博客网 时间:2024/06/03 02:25

抛弃了百度空间,以后acm的题都往这里发了

toj2892——任务先后顺序问题,看是否一个有向图中有环

//toj2892#include<iostream>#include<memory.h>using namespace std;int i,j,k,x,y,m,n,into[101];bool topology(int a[][50]){    memset(into,0,sizeof(into));    for(i=1;i<=n;i++)       for(j=1;j<=n;j++)          if(a[i][j]!=0)into[j]++;//求出每个点的入度    into[0]=1;    for(i=1;i<=n;i++)    {       j=0;       while(into[j]!=0)//找出入度为0的点,即没前驱的那个        {           j++;           if(j>n)return false;//如果找不到了证明有环                        }            into[j]=-1;//删除节点j                    for(k=1;k<=n;k++)       {           if(a[j][k]>0)//删除所有j节点连着的边               into[k]--;                        }    }    return true; }int main(){   int t,a[50][50];   cin>>t;    while(t--)   {      cin>>n>>m;      memset(a,0,sizeof(a));      for(i=1;i<=m;i++)      {         cin>>x>>y;         a[x][y]=1;                       }                if(topology(a))         cout<<1<<endl;       else cout<<0<<endl;           }   return 0;    }

原创粉丝点击