Ordering Tasks
UVA - 10305 下面的代码是这题的题解;
// dfs的拓扑排序,在遍历V次的基础上 递归 E次, V为顶点数,E为边数
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define Maxn 110
int n,m,G[Maxn][Maxn],vis[Maxn],res[Maxn],p;
bool dfs(int u) {
for(int i = 1 ; i <= n ; ++i) {
if(G[u][i]) {
if(vis[i] == -1) return false; //说明 i 这个顶点出发的dfs还没结束就又重新指向这个点
else if(!vis[i]) { // 则,存在环
vis[i] = -1;
if(!dfs(i)) return false;
else res[p--] = i;
}
vis[i] = 1;
}
}
return true;
}
int main(void)
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",std

最低0.47元/天 解锁文章
188

被折叠的 条评论
为什么被折叠?



