看了拓撲排序 這裡走一遍拓撲排序的**以及運算結果 相關的**解釋 已經在程式中標明了!
#include #include using namespace std;
const int max_vertex_num = 30;//最大結點數
stacks;//定義棧 儲存度為0的頂點
typedef struct arcnode//邊表結點
}arcnode;
typedef struct vnode//頂點表結點
}vnode, adjlist[max_vertex_num];
typedef struct algraph
algraph;
//這裡是全域性變數 所以在main函式中 直接使用了g
algraph g;//用鄰接矩陣表示的圖
int indegree[max_vertex_num];//定義乙個度的陣列 用如儲存頂點的入度資訊
bool topologicalsort(algraph g, int *indegree)
int count = 0;
arcnode *p;
while (!s.empty())//如果棧不為空 那麼執行出棧操作
}if (count < g.vexnum)
return true;//count數與頂點數目相等時 表明這是乙個五環aov網
}int main()
//採用拓撲排序函式 如果沒有環 那麼則可以成功輸入 如果有環 報錯
if (topologicalsort(g, indegree))
cout << "拓撲排序成功!" << endl;
else
cout << "該有向圖有環" << endl;
return 0;
}
下面是執行的結果 可以參考一下
請輸入結點數和邊數:12 16
分別輸入邊的頂點對 例如3 5
第1條邊1 2
第2條邊1 3
第3條邊2 3
第4條邊1 4
第5條邊3 5
第6條邊4 5
第7條邊11 6
第8條邊5 7
第9條邊3 7
第10條邊3 8
第11條邊6 8
第12條邊9 10
第13條邊9 11
第14條邊9 12
第15條邊10 12
第16條邊1 12
9-->10-->11-->6-->1-->2-->3-->8-->4-->5-->7-->12-->拓撲排序成功!
拓撲排序的實現 TopoSort
拓撲排序是求乙個aov網 頂點代表活動,各條邊表示活動之間的率先關係的有向圖 中各活動的乙個拓撲序列的運算,可用於測試aov 網路的可行性.整個演算法包含三步 1.計算每乙個頂點的入度,存入indegree陣列中.2.檢查indegree陣列中頂點的入度,將入度為零的頂點進棧.3.不斷從棧中彈出入度...
拓撲排序的演算法實現
找出乙個入度為 0 的頂點,通過遞迴的方式遍歷它所有可達的頂點,將其輸出到拓撲排序的結果序列中,對遍歷過的頂點做標記,避免其被重複訪問。迴圈執行上面的過程,直到所有的頂點都被輸出。public class topologicalsort adjacencylist dfs this.isvisite...
拓撲排序 C實現
接著上一次的c 實現,這次用c語言寫一遍。主要是多了棧stack的實現部分。參考了 資料結構 教材。如下 include include include include 圖的鄰接表儲存表示 define max vertex num 20 typedef struct arcnode arcnode...