码迷,mamicode.com
首页 > 其他好文 > 详细

Best Coder Round#25 1001 依赖检测

时间:2015-01-03 23:41:07      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

原题大致上就是检测一系列进程之间是否存在循环依赖的问题,形如: a->b->c->a,  a->a ,都行成了循环依赖,事实上可以视为“检测链表中是否存在环”

AC代码:

#include <iostream>
#include <set>
#include <cstring>

using namespace std;

int main()
{
    int procs[10000];
    int nProc, nDep;
    while( cin >> nProc >> nDep )
    {
        memset(procs,0,10000);
        set<int> idSet;
        bool hasCircle = false;
        for( ; nDep>0; --nDep )
        {
            int a, b;
            cin >> a >>b;

            idSet.insert(a);
            idSet.insert(b);

            if( a == b )
            {
                hasCircle = true;
            }
            procs[a] = b;
        }

        if( !hasCircle )
        {
            for( set<int>::iterator ii = idSet.begin();
                 ii != idSet.end();
                 ii++ )
            {
                bool visit[10000] = {false};
                int p = procs[*ii];
                while( p && visit[p] == false )
                {
                    visit[p] = true;
                    p = procs[p];
                }

                if( p )
                {
                    hasCircle = true;
                    break;
                }
            }
        }


        if( hasCircle )
        {
            cout << "NO" << endl;
        }else{
            cout << "YES" << endl;
        }

    }

    return 0;
}

  

Best Coder Round#25 1001 依赖检测

标签:

原文地址:http://www.cnblogs.com/medivh-tang/p/4200066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!