本博文源於浙江大學《資料結構》,姥姥講的拓撲排序太有用了,彷彿解決了人生發展規劃的難題,應該先做什麼後做什麼,怎樣做,如何做的難題。但是博主比較菜,實現的比較慢速,只領略到姥姥的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 從圖中刪除該頂點和所有...