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

 

posted on 2017-05-02 20:55  远搏  阅读(115)  评论(0编辑  收藏  举报

导航