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

来源:互联网 发布:sql基础教程 编辑:程序博客网 时间:2024/05/16 04:05

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

Time Limit: 1000MSMemory Limit: 65536KB
SubmitStatistic

Problem Description

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

Input

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

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

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

 

Output

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

 

Example Input

1 02 21 22 1

Example Output

YESNO

Hint

#include<bits/stdc++.h>
using namespace std;
int s[15][15], vist[15], du[15];
int n, m, cnt;
void create(int m)
{
    int u, v;
    while(m--)
    {
        cin>>u>>v;
        s[u][v] = 1;
        du[v]++;
    }
}
void f(int n)
{
    int i, j, k;
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        {
            if(du[j] == 0 && !vist[j])
            {
                vist[j] = 1;
                cnt--;
                for(k = 1; k <= n; k++)
                {
                    if(s[j][k])
                        du[k]--;
                }
                break;
            }
        }
    }
}
int main()
{
    while(cin>>n>>m)
    {
        memset(s,0,sizeof(s));
        memset(vist,0,sizeof(vist));
        memset(du,0,sizeof(du));
        cnt = n;
        create(m);
        f(n);
        if(cnt == 0)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}
阅读全文
2 0
原创粉丝点击