拓撲排序核心程式碼
這裡使用c[maxn]記錄當前結點是否訪問過,t為c陣列當前項的下標;topo陣列記錄拓撲排序,n為結點數(變數數), 圖G記錄所有邊的關係。
c[u] = 0表示從來沒有訪問過(即沒呼叫過dfs[u]);c[u] = 1表示已經訪問過,並且其所有的子孫也被訪問過。c[u] = -1表示正在訪問(即遞迴呼叫dfs[u]正在棧幀中,尚未返回)
int c[maxn], t;
int topo[maxn];
int n, 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;
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;
}
相關文章
- 圖解拓撲排序+程式碼實現圖解排序
- 拓撲排序排序
- 拓撲排序,YYDS排序
- 圖論——拓撲排序圖論排序
- 筆記:拓撲排序筆記排序
- 拓撲排序小結排序
- Reward (圖論+拓撲排序)圖論排序
- AOV網與拓撲排序排序
- 【筆記/模板】拓撲排序筆記排序
- DFS實現拓撲排序排序
- 拓撲排序就這麼回事排序
- 演算法-圖論-拓撲排序演算法圖論排序
- 有向圖的拓撲排序——DFS排序
- (set+拓撲排序) CF1572A Book排序
- 圖的拓撲排序詳解與實現排序
- 拓撲排序 (BFS )DAG (有向無環圖)排序
- VOL.2 拓撲排序與關鍵路徑排序
- 【Tarjan 拓撲排序 dp】P3387 【模板】縮點排序
- 拓撲排序詳解(梅開二度之dfs版按字典序輸出拓撲路徑+dfs版輸出全部拓撲路徑排序
- Android程式設計師會遇到的演算法(part 7 拓撲排序)Android程式設計師演算法排序
- Noc拓撲
- 洛谷P3953 逛公園(dp 拓撲排序)排序
- 牛客 51011 可達性統計(拓撲排序,bitset)排序
- 使用 eBPF 零程式碼修改繪製全景應用拓撲eBPF
- 【BZOJ-1565】植物大戰殭屍 拓撲排序 + 最小割排序
- Day2 尤拉路,拓撲排序和差分約束排序
- BBC如何使用團隊拓撲構建內部核心平臺?
- Leetcode 1691. 堆疊長方體的最大高度(拓撲排序 + DP)LeetCode排序
- StratoVirt 的 vCPU 拓撲(SMP)
- 網路拓撲結構
- BZOJ2535: [Noi2010]Plane 航空管制2(拓撲排序 貪心)排序
- 網路拓撲圖:網路拓撲圖介紹及線上製作
- Cilium 1.11 釋出,帶來核心級服務網格、拓撲感知路由....路由
- 藍橋杯 卡勒沃夫之弱水路三千(提高型) 拓撲排序+Map排序
- 演算法資料結構 | 圖論基礎演算法——拓撲排序演算法資料結構圖論排序
- Istio全景監控與拓撲
- 拓撲序的三種功能
- tidb拓撲查詢工具qtidbTiDBQT
- 樹的拓撲序計數