拓撲排序入門

2021-08-22 00:02:22 字數 1057 閱讀 7898

拓撲排序性質:

1拓撲排序只有在有向無環圖中才能排出有效的序列,因此可以通過拓撲排序判斷該圖是否為有向有環圖。

2、如果輸入的有向圖中的點,不存在入度為0的點,則該有向圖存在迴路

3、如果存在的入度為0的點大於乙個,不妨礙拓撲排序 ,可以得到多種拓撲排序的結果

拓撲排序的步驟:

1.在有向圖中選乙個沒有入度的頂點並且輸出

2.從圖中刪除所有和它有關的邊

3.重複上述兩步,直至所有頂點輸出,或者當前圖中不存在無入度的頂點為止,後者代表我們的有向圖

是有環的,因此,也可以通過拓撲排序來判斷乙個圖是否有環。

拓撲排序的方法

1.鄰接矩陣+暴搜

#include#include#define max 100

#includeusing namespace std;

int maze[max][max]; //鄰接矩陣

int indegree[max]; //入度數

void toposort(int maze[max][max],int indegree[max],int m)

for(int j=0;j3.使用棧

#include#include#includeusing namespace std;

bool sort()

}//把入度為0的頂點入棧

for (i = 0; i != this->vexnum; i++)

}//count用於計算輸出的頂點個數

int count=0;

while (!s.empty())

temp = temp->next;

}++count;

}if (count == this->vexnum)

cout << "此圖有環,無拓撲序列" << endl;

return false;//說明這個圖有環

}

拓撲排序入門

先來看乙個實際案例來引出拓撲排序的概念。大學四年有很多課程,假設這些課程表示為c1,c2,c12,一共12門課程如下表 而這些課程的學習順序是有限制的,比如在學習 資料結構 c3之前必須先學習 程式設計基礎 c1和 離散數學 c2,學習 作業系統 c8前必須先學習 資料結構 c3和 計算機組成原理 ...

拓撲排序(入門)

參考部落格 入門拓撲排序 在乙個有向圖中,對所有的節點進行排序,要求沒有乙個節點指向它前面的節點。先統計所有節點的入度 作為終點被指向的次數 對於入度為0的節點就可以分離出來,然後把這個節點指向的節點的入度減一。一直更新,直到所有的節點都被分離出來。如果最後不存在入度為0的節點,那就說明有環,不存在...

新手入門 拓撲排序

o o o哈!上個月學的拓撲排序,曾經覺得它很高深.今天就寫篇簡單的入門.也當是給自己複習好了 咱們不用那些陌生的名詞.咱們通俗點講.介個演算法是解決甚麼問題的呢?實際中,我們經常會碰到到這樣一類問題 一堆元素,不一定每兩個間都有嚴格的先後關係.先前的冒泡,快速排序等等等等都是建立在 每兩個元素間都...