C++輸出有向無環圖的所有拓撲序列
1,基本思想
輸出有向無環圖的其中一個拓撲序列比較簡單,輸出所有的拓撲序列則要用到回溯的思想和遞迴的方法。這裡暫不對回溯法做解釋。
2,程式碼實現
#include<iostream>
#include<vector>
using namespace std;
#define Max 9999
vector<int> result; //用來儲存並輸出拓撲結果
int n, m; //n 為頂點數, m 為邊數
int G[Max][Max];
bool visited[Max];
int inDegree[Max]; //記錄各個頂點的入度
void dfs()
{
if (result.size() == n)
{
for (int i = 0; i < n; ++i)
{
cout << result[i] << " ";
}
cout << endl;
return;
}
for (int i = 0; i < n; ++i)
{
if (!visited[i] && inDegree[i] == 0)
{
result.push_back(i);
visited[i] = true;
for (int j = 0; j < n; ++j)
{
if (G[i][j] > 0)
{
inDegree[j]--;
}
}
dfs();
result.pop_back();
visited[i] = false;
for (int j = 0; j < n; ++j)
{
if (G[i][j] > 0)
{
inDegree[j]++;
}
}
}
}
return;
}
int main()
{
cout << "輸入頂點數:";
cin >> n;
cout << "輸入邊數:";
cin >> m;
fill(G[0], G[0] + Max * Max, 0);
fill(visited, visited + Max, false);
fill(inDegree, inDegree + Max, 0);
cout << "輸入各條邊的資訊:";
int u, v; //u為邊的出發點, v為邊的終點
for (int i = 0; i < m; ++i)
{
cin >> u >> v;
G[u][v]++;
inDegree[v]++;
}
dfs();
return 0;
}
輸入輸出資訊:
相關文章
- 拓撲排序 (BFS )DAG (有向無環圖)排序
- 資料結構與演算法——有向無環圖的拓撲排序C++實現資料結構演算法排序C++
- C語言實現有向無環圖的拓撲排序演算法C語言排序演算法
- 有向圖的拓撲排序——DFS排序
- POJ1094[有向環 拓撲排序]排序
- 圖論——拓撲排序圖論排序
- 網路拓撲圖:網路拓撲圖介紹及線上製作
- Reward (圖論+拓撲排序)圖論排序
- 拓撲排序詳解(梅開二度之dfs版按字典序輸出拓撲路徑+dfs版輸出全部拓撲路徑排序
- 一個很漂亮的拓撲圖程式
- 團隊拓撲快速參考圖
- vue 實現動態拓撲圖Vue
- HT For Web 拓撲圖背景設定Web
- 網站拓撲圖(來自qq)網站
- 演算法-圖論-拓撲排序演算法圖論排序
- 圖的拓撲排序詳解與實現排序
- 拓撲排序排序
- 無向圖的最小環問題[TODO]
- 圖解拓撲排序+程式碼實現圖解排序
- 【圖論】拓撲排序+優先佇列圖論排序佇列
- 網路拓撲圖上文字的巧妙應用
- 拓撲排序,YYDS排序
- 拓撲排序模板排序
- 圖(3)--拓撲排序與關鍵路徑排序
- 基於d3.js的關係拓撲圖JS
- ECharts整合HT for Web的網路拓撲圖應用EchartsWeb
- POJ1270 Following Orders[拓撲排序所有方案 Kahn]排序
- 網路拓撲例項之RRPP單環(五)
- ApacheStorm官方文件——在生產環境中執行拓撲ApacheORM
- 拓撲排序小結排序
- 筆記:拓撲排序筆記排序
- 拓撲序的三種功能
- 樹的拓撲序計數
- zabbix二次開發整合拓撲圖功能
- 電信網路拓撲圖自動佈局
- HTML5 網路拓撲圖效能優化HTML優化
- 向量化的HTML5拓撲圖形元件設計HTML元件
- 向量Chart圖表嵌入HTML5網路拓撲圖的應用HTML