数据结构之图的应用:拓扑排序
生活随笔
收集整理的這篇文章主要介紹了
数据结构之图的应用:拓扑排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖的應用:拓撲排序
- 思維導圖:
- 拓撲排序的定義:
- 拓撲排序的算法思想:
- 拓撲排序的代碼實現:
- 拓撲排序的特點:
- 逆拓撲排序:
- 用DFS算法實現逆拓撲排序:
思維導圖:
拓撲排序的定義:
拓撲排序的算法思想:
ps: 拓撲排序不一定唯一
拓撲排序的代碼實現:
bool ToplogicalSort(Graph G){InitStack(s); //當出現多個入隊為0的頂點時入棧保存 for(int i=0;i<G>vexnum;i++)if(indegree[i] == 0) //保存所有頂點當前的入度 push(S,i);int count = 0; //當前訪問的頂點的個數 while(!isEmpty(s)){ //不為空 Pop(s,i);print[count++] = i; //保存拓撲序列大的數組 for(p = G.Vertices[i].firstarc;p;p = nextarc){ //遍歷邊表 v = p->adjvex;if(!(--indegree[v])) //刪除一個頂點后讓其相鄰頂點入度減一,若減一之后為0,則入棧 Push(s,v);}} if(count < G>vexnum) //是否訪問了全部節點 return false;elsereturn true; } //時間復雜度:O(|V|+|E|)拓撲排序的特點:
逆拓撲排序:
PS:
用鄰接矩陣優于鄰接表
用DFS算法實現逆拓撲排序:
bool visited[MAX_TRUE_SIZE]; void DFSTraverse(Graph G){for(int i=0;i<G.vexnum;++i)visited[i] = false;for(int i=0;i<G.vexnum;++i)if(!visited[i])DFS(G,i); }void DFS(Graph G,int v){visit(v);visited[v] = true;for(w = FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w))if(!visited[w])DFS(G,w);print(v); }總結
以上是生活随笔為你收集整理的数据结构之图的应用:拓扑排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统之计算机系统概述:1、操作系统概
- 下一篇: 过滤选择器——子元素过滤选择器