C語言浙大版 小白實現拓撲排序 包含測試原始碼

2021-10-05 16:13:25 字數 2179 閱讀 2847

本博文源於浙江大學《資料結構》,姥姥講的拓撲排序太有用了,彷彿解決了人生發展規劃的難題,應該先做什麼後做什麼,怎樣做,如何做的難題。但是博主比較菜,實現的比較慢速,只領略到姥姥的1/10的精華。但是我想先把上課的先實現一邊再說!

姥姥上課講的是這個:

而我比較菜,實現的縮減版,是這張圖。

因為僅供參考具體以**為準,**執行效果如下:

看起來不錯的感覺,那就放上**吧!不,先放上測試用例,這是有向圖帶權值為1的圖模型,希望大家注意!

15140

2121

12266

11696

10788

98109

13344

5514

//圖的鄰接表建立

#include

#include

#define error -1

#define maxvertexnum 20

#define true 1

#define false 0

typedef

int vertex;

typedef

int weighttype;

typedef

char datatype;

typedef

intbool

;typedef

struct enode *ptrtoenode;

struct enode

;typedef ptrtoenode edge;

typedef

struct adjvnode *ptrtoadjvnode;

struct adjvnode

;typedef

struct vnodeadjlist[maxvertexnum]

;typedef

struct gnode *ptrtognode;

struct gnode

;typedef ptrtognode lgraph;

lgraph creategraph

(int vertexnum)

return graph;

}void

insertedge

(lgraph graph, edge e)

lgraph buildgraph()

}return graph;

}typedef

int position;

typedef

int elementtype;

struct qnode

;typedef

struct qnode *queue;

queue createqueue

(int maxsize)

intisfullq

(queue q)

void

addq

(queue q,elementtype item)

q->rear =

(q->rear+1)

%q->maxsize;

q->data[q-

>rear]

= item;

}int

isemptyq

(queue q)

elementtype deleteq

(queue q)

else

}bool

topsort

( lgraph graph, vertex toporder)

/* while結束*/

if( cnt != graph-

>nv )

return

false

;/* 說明圖中有迴路, 返回不成功標誌 */

else

return

true;}

intmain()

拓撲排序(C語言實現)

拓撲排序可以將乙個有向無環圖轉換為乙個線性序列。它也是判定乙個有向圖是否是無環的方法之一。如何進行拓撲排序,方法如下 1 從有向圖中選取乙個 沒有前驅 入度為 0 的 頂點,並輸出之 2 從有向圖中刪去此頂點以及所有以它為尾的 弧 弧頭頂點的入度減 1 重複上述兩步,直至圖空,或者圖不空但找不到 無...

C 語言實現 拓撲排序

1 拓撲排序的概念 對乙個1.在有向圖中選乙個沒有前驅的頂點並且輸出 2.從圖中刪除該頂點和所有以它為尾的弧 白話就是 刪除所有和它有關的邊 3.重複上述兩步,直至所有頂點輸出,或者當前圖中不存在無前驅的頂點為止,後者代表我們的有向圖是有環的,因此,也可以通過拓撲排序來判斷乙個圖是否有環。3 拓撲排...

拓撲排序 C語言

拓撲排序就是由某個集合上的乙個偏序得到該集合上的乙個全序。某個集合的偏序就是指集合中僅有部分成員之間可比較,而全序是集合中全部成員都可以進行比較。可以進行拓撲排序的需要是乙個有向無環圖。對乙個圖進行拓撲排序,就要進行以下幾個步驟 1 在有向圖中選乙個沒有前驅的頂點並輸入之 2 從圖中刪除該頂點和所有...