拓撲排序的 語言實現

2021-07-04 21:36:34 字數 1607 閱讀 9492

執行步驟:由aov網構造拓撲序列的拓撲排序演算法主要是迴圈執行以下兩步,直到不存在入度為0的頂點為止。

(1) 選擇乙個入度為0的頂點並輸出之;

(2) 從網中刪除此頂點及所有

出邊。迴圈結束後,若輸出的頂點數小於網中的頂點數,則輸出「有迴路」資訊,否則輸出的頂點序列就是一種拓撲序列。

#ifndef _queue_h

#define _queue_h

/*定義檔案queue.h*/

struct queue;

typedef struct queue *position;

typedef struct queue

*queue;

void makeempty(queue q)

void createqueue()

int isempty(queue q)

/*入隊函式*/

void enqueue(int n,queue q)

/*出隊*/

int dequeue(queue q)

#endif

#include #include #include "queue.h"

typedef struct array/*結構體array->ele儲存根據拓撲排序排列好的定點*/

*array;

typedef struct arr/*儲存每個定點入度的資訊*/

*arr;

typedef struct graph/*儲存邊的資訊*/

*graph;

void initialize(graph *g,arr *s)

for(w=1;w<=5;w++)

(*s)->a[w]=0;

for(j=1;j<=5;j++)

for(i=1;i<=5;i++) }

void topsort(graph g,arr s,array *a)

while(isempty(q)!=1)}}

int main()

程式可以變換的地方:

1.這個程式中的佇列也可以改為棧來描述,會簡單一些。

2.我用來儲存邊的資訊用的臨接矩陣,也可以使用臨接鍊錶。

3.儲存的資訊量可以改變,我把資訊都定位為5,大家編輯的時候可以把我的數字都換為maxnum,然後typedef maxnum 你需要的數字

程式設計值得注意的幾點:

1.要了解入度的定義:入度是

圖論演算法中重要的概念之一。它通常指

有向圖中某點作為圖中邊的終點的次數之和。

2.當下乙個函式需要使用上乙個函式的引數的值的時候,函式的形參一定要使用雙指標,如果你說我是單指標。。。圖樣圖森破,我在結構體定義的時候就已經是指標了。不懂雙指標的同學可以看一下這篇文章寫的很清楚。

最後給大家發一下我的成果吧!

拓撲排序(C語言實現)

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

C 語言實現 拓撲排序

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

基礎拓撲排序 C語言實現

演算法步驟 1 根據鄰接矩陣統計每個頂點的入度,統計結果存在mark中 2 在mark中尋找為0的頂點i,找到後將mark i 並且更新與該點相關的頂點的mark陣列 3 重複步驟 2 直到所有點的mark均為 1。例項以及 全域性變數,圖的鄰接矩陣以及記錄陣列mark int a 6 6 int ...