拓撲排序演算法

2021-09-26 19:24:25 字數 1934 閱讀 5182

拓撲排序的相關概念及思想參閱如下文章:

資料結構圖之五(拓撲排序)

// @brief header file

private:

#define maxvex 14

//頂點數

#define maxedge 20

//邊數

typedef

struct edgenode //邊表節點

edgenode;

typedef

struct vertexnode//頂點表節點

vertexnode, adjlist[maxvex]

;

adjlist adjlist;

int numvertexes, numedges;

// 圖中當前頂點數和邊數(對於本案例,已經存在巨集定義)

public:

edgenode*

buynode()

;//構建節點

void

initgraph()

;//初始化圖

void

creategraph()

;//建立圖

void

printgraph()

;//列印輸出的邏輯圖

bool topologicalsort()

;//拓撲排序

// @brief cpp file

ctest:

:edgenode* ctest:

:buynode()

void ctest:

:initgraph()

}// 建立圖

void ctest:

:creategraph()

cout <<

"輸入20條邊的資訊:"

<< endl;

for(i =

0; i < maxedge;

++i)

}// 列印輸入資訊的邏輯圖

void ctest:

:printgraph()

cout << endl;}}

bool ctest:

:topologicalsort()

while

(!sq.

empty()

) cout << adjlist[gettop]

.data <<

"-->"

; pnode = adjlist[gettop]

.firstedge;

while

(pnode !=

null)}

return ncnt != maxvex;

}

//@brief int main(int argc, char* args)

cout <<

"init graph."

<< endl;

ctestptr.

initgraph()

; cout <<

"creat graph:"

<< endl;

ctestptr.

creategraph()

; cout <<

"列印圖的鄰接表邏輯結構:"

<< endl;

ctestptr.

printgraph()

; cout <<

"拓撲排序路徑:"

<< endl;

bool bacire = ctestptr.

topologicalsort()

; cout << endl;

cout <<

"存在回環? "

<< bacire << endl;

這裡不再展示測試資料及結果,讀者可以自行測試。

拓撲排序演算法

對許多資料結構教材實在不滿意,至少我是看不懂 至於拓撲排序演算法,教材上那些偽 真真教人頭暈。只寫了幾個struct結構,我根本看不出這是鄰接表。如果給出乙個清晰明了的圖,一切不就簡單了?總之,關鍵就是建立乙個鄰接表。然後利用這個表進行拓撲排序。邊表結點宣告 typedef struct edgen...

拓撲排序演算法

對乙個 有向無環圖 directed acyclic graph簡稱dag g進行拓撲排序,是將g中所有頂點排成乙個線性序列,使得圖中任意一對頂點u和v,乙個有向無環圖的拓撲序列不是唯一的 進行拓撲排序的演算法並不複雜 1 在有向圖中選乙個沒有前驅 入度為0 的頂點且輸出之 2 從圖中刪除該頂點及它...

演算法 拓撲排序

定義 應用 有向圖來表示,圖中的頂點代表活動 子工程 圖中的有向邊代表活動的先後關係,即有向邊的起點的活動是終點活動的前序活動,只有當起點活動完成之後,其終點活動才能進行。通常,我們把這種頂點表示活動 邊表示活動間先後關係的有向圖稱做頂點活動網 activity on vertex network ...