原题大致上就是检测一系列进程之间是否存在循环依赖的问题,形如: 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;
}
原文:http://www.cnblogs.com/medivh-tang/p/4200066.html