#A8. 拓扑排序-填空

拓扑排序-填空

  int n,m;
  vector a[110];
  queue q;
  int in[110];

  void topsort() {
    for (int i = 1; i <= n; i++) {
      if ({{ input(1) }}) { // 填空:判断入度是否为0
        q.push(i);
      }
    }
    while (!q.empty()) {
      int v = q.front();
      cout << v << " ";
      q.pop();
      int l = a[v].size();
      for (int i = 0; i < l; i++) {
        int to = a[v][i];
        in[to]{{ input(2) }}; // 填空:入度减1操作
        if ({{ input(3) }}) { // 填空:判断入度是否为0
          q.push(to);
        }
      }
    }
  }

  int main() {
    while (1) {
      cin >> n >> m;
      if (n == 0 && m == 0) return 0;
      for (int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        a[x].push_back(y);
        in[y]{{ input(4) }}; // 填空:入度加1操作
      }
      topsort();
      cout << endl;
      memset(in, 0, sizeof(in));
      while (!q.empty()) {
        q.pop(); // 清空队列
      }
      for (int i = 1; i <= n; i++) {
        a[i].clear();
      } // 清空邻接表
    }
    return 0;
  }