日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构之图的应用:拓扑排序

發布時間:2025/3/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之图的应用:拓扑排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖的應用:拓撲排序

  • 思維導圖:
  • 拓撲排序的定義:
  • 拓撲排序的算法思想:
  • 拓撲排序的代碼實現:
  • 拓撲排序的特點:
  • 逆拓撲排序:
  • 用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); }

總結

以上是生活随笔為你收集整理的数据结构之图的应用:拓扑排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。