拓扑排序
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; }

浙公网安备 33010602011771号