Unverified Commit 520d0825 authored by ZHB's avatar ZHB Committed by GitHub
Browse files

修改 DFS 版拓扑排序的代码

1. 修正代码中的错误
2. 改用 vector 存图
3. 节点编号的范围改为 [0, n)
parent e592b8eb
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -84,26 +84,31 @@ bool toposort() {
## DFS 算法

```cpp
// dfs 版本
vector<int> G[MAXN]; // vector 实现的邻接表
int c[MAXN];         // 标志数组
vector<int> topo;    // 拓扑排序后的节点

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

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