拓扑排序(dfs)
int c[N];//c[u]=0表示从来没有访问过;c[u]=1表示已经访问过,并且还递归访问过它的所有子;c[u]=-1表示正在访问。 int topo[N],t; int G[N][N]; 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;//c[u]=1表示回溯 return true; } bool toposort() { t=n; memset(c,0,sizeof(c)); for(int u=0;u<n;u++) if(!c[u]) if(!dfs(u)) return false; return true; }