给定很多事件,做这些事件有先后顺序,输出合理的顺序。
判断有向图是否存在环。
int c[N],t,ans[N],n,m;
vector<int>G[N];
bool dfs(int u)
{
c[u]=-1;
for(int i=0;i<G[u].size();i++)
{
if(c[G[u][i]]<0)
return false;
if(!c[G[u][i]]&&!dfs(G[u][i]))
return false;
}
ans[t--]=u;
c[u]=1;//c数组记录拓扑序列。
return true;
}
bool toposort()
{
t=n;
memset(c,0,sizeof(c));
for(int i=1; i<=n; i++)
if(!c[i])
if(!dfs(i))
return false;//有环,排序失败
return true;
}