判断拓扑排序

来源:互联网 发布:淘宝化妆品正品店 编辑:程序博客网 时间:2024/05/16 17:10
#include<cstdio>#include<cstring>#include<iostream>#include<stack>using namespace std;#define MAXD 100int G[MAXD][MAXD];int d[MAXD];int n,m;bool Judge_Topp(){    stack<int>S;    for(int i = 0 ;i < n; i++){        if(d[i] == 0)          S.push(i);    }    while(!S.empty()){        int top = S.top();        S.pop();        for(int i = 0;i <n;i++)            if(G[top][i] == 1){            d[i]--;            if(d[i] == 0)                S.push(i);        }    }    for(int i = 0;i <n;i++)        if(d[i] != 0)          return false;    return true;}int main(){    while(scanf("%d%d",&n,&m) != EOF){        memset(d,0,sizeof(d));        for(int i = 0;i < m;i++){            int x,y;            scanf("%d%d",&x,&y);            G[x][y] = 1;            d[y] ++;        }        if(Judge_Topp())           cout<<"YES\n"<<endl;        else           cout<<"No\n"<<endl;    }    return 0;}

0 0
原创粉丝点击