bool dfs(int u,int maxr){
c[u] = -1;\\开始访问某点及某点之后时,将其设为-1
for (int i = 1; i <= maxr;i++){
if(g[u][i]==1){
if(c[i]==-1)\\u的某后继节点是正在访问的,说明有环
return false;
else if(!c[i]&&!dfs(i,maxr))\\!c[i]的作用是如果遇到访问完全的点,就没有必要访问下去,
return false;\\如果没有访问过c[i]=0,那么深入访问且下一个也是false就返回false;
}
}
c[u] = 1;
sot[top] = u;
top--;
return true;
}
bool topsort(int maxr){
memset(sot, 0, sizeof(sot));
for (int i = 1; i <=maxr;i++){
if(!c[i])\\没有访问过才继续访问
if(!dfs(i,maxr))
return false;
}
return true;
}