拓撲排序核心程式碼
這裡使用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 (圖論+拓撲排序)圖論排序
- 拓撲排序 - Topological Sort排序
- HDU 4857 逃生(拓撲排序)排序
- AOV網與拓撲排序排序
- DFS實現拓撲排序排序
- 【筆記/模板】拓撲排序筆記排序
- 拓撲排序就這麼回事排序
- HDU4857逃生(拓撲排序)排序
- 紙上談兵: 拓撲排序排序
- poj 1094 拓撲排序排序
- 有向圖的拓撲排序——DFS排序
- poj1094 拓撲排序排序
- 演算法-圖論-拓撲排序演算法圖論排序
- 【圖論】拓撲排序+優先佇列圖論排序佇列
- POJ 3249-Test for Job(拓撲排序&&DP)排序
- HDU 5438 Ponds (拓撲排序應用+DFS)排序
- CF 274D Lovely Matrix(拓撲排序)排序
- HDU 4857-逃生(反向拓撲排序-按條件排序)排序
- 圖的拓撲排序詳解與實現排序
- 圖(3)--拓撲排序與關鍵路徑排序
- hdu 1811 並查集+拓撲排序並查集排序
- (set+拓撲排序) CF1572A Book排序
- 拓撲排序 (BFS )DAG (有向無環圖)排序
- VOL.2 拓撲排序與關鍵路徑排序
- POJ1094[有向環 拓撲排序]排序
- csdn hud 2094 拓撲排序 已經AC排序
- 拓撲排序詳解(梅開二度之dfs版按字典序輸出拓撲路徑+dfs版輸出全部拓撲路徑排序
- 洛谷P3953 逛公園(dp 拓撲排序)排序
- HDU1285確定比賽名次(拓撲排序)排序
- 【Tarjan 拓撲排序 dp】P3387 【模板】縮點排序
- Android程式設計師會遇到的演算法(part 7 拓撲排序)Android程式設計師演算法排序