grtsb.c

来自「经典c++程序的实现」· C语言 代码 · 共 25 行

C
25
字号
void topsort(Graph& G) {   // Topological sort: Queue
  Queue Q(G.n());
//  int Count[G.n()];
  int *Count;

  Count = new int [G.n()];

  for (int v=0; v<G.n(); v++) Count[v] = 0; // Initialize
  for (v=0; v<G.n(); v++)  // Process every edge
    for (Edge w = G.first(v); G.isEdge(w); w = G.next(w))
       Count[G.v2(w)]++;   // Add to v2's prereq count
  for (v=0; v<G.n(); v++)  // Initialize Queue
    if (Count[v] == 0)     // Vertex has no prerequisites
      Q.enqueue(v);
  while (!Q.isEmpty()) {   // Process the vertices
    int v = Q.dequeue();
    printout(v);           // PreVisit for Vertex V
    for (Edge w = G.first(v); G.isEdge(w); w = G.next(w)) {
      Count[G.v2(w)]--;    // One less prerequisite
      if (Count[G.v2(w)] == 0) // This vertex is now free
        Q.enqueue(G.v2(w));
    }
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?