数据结构实验之图论十:判断给定图是否存在合法拓扑序列

数据结构实验之图论十:判断给定图是否存在合法拓扑序列

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。

Input

 输入包含多组,每组格式如下。

第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)

后面m行每行两个整数a b,表示从a到b有一条有向边。

 

Output

 若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。

 

Sample Input

1 0
2 2
1 2
2 1

Sample Output

YES
NO
#include <iostream>
#include <cstring>

using namespace std;

int map[15][15], tag[15], a[15];
int main()
{
    int n,m,u,v,f;
    while(cin>>n>>m)
    {
        memset(map,0,sizeof(map));
        memset(tag,0,sizeof(tag));
        memset(a,0,sizeof(a));
        while(m--)
        {
            cin>>u>>v;
            map[u][v] = 1;
            a[v]++;
        }
        int i, j, k;
        for(i=0; i<n; i++)
        {
            f = 0;
            for(j=0; j<n; j++)
            {
                if(!a[j]&&!tag[j])
                {
                    tag[j] = 1;
                    for(k=0; k<n; k++)
                    {
                        if(map[j][k])
                            a[k]--;
                    }
                    f = 1;
                    break;
                }
            }
        }
        if(f)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

 

posted @ 2018-12-07 19:37  葫芦锤  阅读(25)  评论(0)    收藏  举报  来源