拓撲排序的實現

2021-09-22 12:42:30 字數 1339 閱讀 5331

看了拓撲排序 這裡走一遍拓撲排序的**以及運算結果 相關的**解釋 已經在程式中標明了!

#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...