拓扑排序

int c[maxn];
int topo[maxn];
bool dfs(int u) {
    c[u] = -1;
    for(int v = 0; v < n; v++) if(G[u][v]) {
        if(c[v] < 0) return false;
        else if(!c[v]&&!dfs(v)) return false;
    }
    c[u] = 1; topo[--t] = u;
    return true;
}

bool toposort(){
    memset(c, 0, sizeof(c));
    for(int u = 0; u < n; u++) if(!c[u])
      if(!dfs(u)) return false;
    return true;
} 

 

posted @ 2019-06-10 18:25  Hanasaki  阅读(109)  评论(0)    收藏  举报