description
在圖論中,拓撲序(topological sorting)是乙個有向無環圖(dag, directed acyclic graph)的所有頂點的線性序列. 且該序列必須滿足下面兩個條件:
每個頂點出現且只出現一次.
若存在一條從頂點 a 到頂點 b 的路徑,那麼在序列中頂點 a 出現在頂點 b 的前面.
對於乙個含有n個節點的有向無環圖(節點編號0到n-1),輸出它的乙個拓撲序.
圖的節點數和邊數均不多於100000,保證輸入的圖是乙個無環圖.
請為下面的solution類實現解決上述問題的topologicalsort函式,函式引數中n為圖的節點數,edges是邊集,edges[i]表示第i條邊從edges[i].first指向edges[i].second. 函式返回值為有向圖的乙個拓撲序. 有向圖有多個拓撲序時,輸出任意乙個即可.
class solution
};
例1:
n = 3,edges = ,函式應返回或者.
例2:
n = 4,edges = ,函式應返回.
拓撲排序:將有向圖中的頂點以線性方式進行排序。即對於任何連線自頂點u到頂點v的有向邊uv,在最後的排序結果中,頂點u總是在頂點v的前面。
過程:從 dag 圖中選擇乙個 沒有前驅(即入度為0)的頂點並輸出。
從圖中刪除該頂點和所有以它為起點的有向邊。
重複 1 和 2 直到當前的 dag 圖為空或當前圖中不存在無前驅的頂點為止。後一種情況說明有向圖中必然存在環。
class solution
}for (int i = 0; i < n; i++) ;
int temp = zero.front();
zero.pop();
result.push_back(temp);
// 進行刪去點temp的操作,使得相應的點的入度減1
for (unordered_set
::iterator it = graph[temp].begin(); it != graph[temp].end(); it++) }}
return result;
}vector
> makegraph(int n, vector
int, int>>& edges)
return result;
}vector
computeindegree(vector
> graph)
}return result;
}};
演算法期中 拓補序
在圖論中,拓撲序 topological sorting 是乙個有向無環圖 dag,directed acyclic graph 的所有頂點的線性序列.且該序列必須滿足下面兩個條件 每個頂點出現且只出現一次.若存在一條從頂點 a 到頂點 b 的路徑,那麼在序列中頂點 a 出現在頂點 b 的前面.對於...
拓撲排序 字典序
1.用優先佇列維護 2.從後往前排序,每次判斷節點的出度,出度 0 進入優先佇列.3.用vector陣列做鄰接表表示整個圖 include include include include include using namespace std const int maxn 30005 vector ...
演算法期中 分組
對於乙個整數數列a 0 a 1 a n 1 進行分組,要求每組1到2個數,並且同組之和不能大於w.求最少可以分成多少組.1 n 100000,1 a i w 1000000000.例1 當a w 5,minpartition a,w 返回3.將2和3放一組,4和5各自單獨作為一組,共3組.例2 當a...