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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

拓扑排序(含代码)

發布時間:2024/1/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拓扑排序(含代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將圖中的結點以某種方式排成一個序列

一些概念

有向無環圖

即無環的有向圖

什么是活動

所有的?程或者某種流程都可以分為若?個?的?程或者階段,我們稱這些?的?程或階段

為“活動”。比如把大象裝進冰箱,第一步打開冰箱,第二步把大象裝進去,第三部關上冰箱門。這三步中的每一步便是一個活動

什么是AVO網

在?個表示?程的有向圖中,? 頂點表示活動,?弧表示活動之間的優先關系的有向圖 稱為

頂點表示活動的?(Activity On Vertex Network),簡稱AOV?。

什么是拓撲序列

設G=(V,E)是?個具有n個頂點的有向圖,V中的頂點序列 V1,V2,V3.......Vn滿?若從頂點Vi到Vj 有?條路徑,則在頂點序列中頂點Vi必在頂點Vj之前。則我們稱這樣的頂點序列為?個拓撲序列。

什么是拓撲排序

對一個有向無環圖構造拓撲序列的過程。官方的定義是由某個集合上的?個偏序得到該集合上的?個全序的操作過程稱為拓撲排序。

基本思想

  • 在有向圖中選擇一個沒有前驅的頂點并且輸出
  • 刪除這個頂點和以他為弧尾的那些弧
  • 重復以上兩步,直到所有的頂點都已輸出或是圖中不存在無前驅的結點為止
  • 若是圖中不存在無前驅的結點為止,則說明圖中存在環路,因此拓撲排序也可以作為一種檢查圖中是否有環路的方法

    public void topology(GraphAdjList graphAdjList){Stack<Vert> stack = new Stack<>(); //存放入度為0的點Vert temp = null;//臨時變量接收出棧元素int count = 0;//已排序數量//int tempIndex;//臨時接收出棧元素的下標for (int i = 0; i < graphAdjList.vNums; i++) {//將入度為0的頂點進棧if(graphAdjList.verts[i].input==0){stack.push(graphAdjList.verts[i]);}}while(!stack.isEmpty()){temp = stack.pop();//tempIndex = getIndex(temp);//入度為0的頂點下標topoStack.push(temp);//存入拓撲序列count++;for (Edge edge = temp.firstEdge; edge.next!=null;edge = edge.next) {if(--graphAdjList.verts[edge.index].input==0){stack.push(graphAdjList.verts[edge.index]);}}}if(count!=graphAdjList.vNums){System.out.println("存在環路");}}

    總結

    以上是生活随笔為你收集整理的拓扑排序(含代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

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