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