AOE網與AOV網


有向無環圖(Directed Acycline Graph, DAG)是一類特殊的有向圖。DAG有着廣泛應用,AOE網和AOV網都是DAG的典型應用。

AOV網

AOV網(Activity On Vertex NetWork)用頂點表示活動,邊表示活動(頂點)發生的先后關系。AOV網的邊不設權值,若存在邊<a,b>則表示活動a必須發生在活動b之前。

若網中所有活動均可以排出先后順序(任兩個活動之間均確定先后順序),則稱網是拓撲有序的,這個順序稱為網上一個全序。(詳情參見離散數學/圖論相關內容)。

在AOV網上建立全序的過程稱為拓撲排序的過程,這個算法並不復雜:

  • 在網中選擇一個入度為0的頂點輸出

  • 在圖中刪除該頂點及所有以該頂點為尾的邊

  • 重復上述過程,直至所有邊均被輸出。

若圖中無入度為0的點未輸出,則圖中必有環。

程序源碼:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

#define M 10001

int n, m, matrix[M][M], i, j;
int book, indegree[M]; //book 已排序的頂點個數

int main()

{

    int a, b, k;

    scanf("%d %d",&n, &m);
    //init
    for (i=1; i<=m; i++) {
        scanf("%d %d",&a, &b);
        matrix[a][b]=1;
        indegree[b]++;
    }

    for (i=1; i<=n; i++) {
        for (j=1; j<=n; j++) {
            if (indegree[j] == 0) { //遍歷所有入度為0的頂點
               indegree[j] = -1;
               book++;
               for (k=1; k<=n; k++) {
                   if (matrix[j][k]==1) { //遍歷所有入度為1的頂點
                      matrix[j][k]=0;     //remove edge e
                      indegree[k]--;       //update
                   }
               }
               break;
            }
        }
    }
    printf("%d\n", book);
    return 0;
}

AOE網

AOE網(Activity On Edge Network)是邊表示活動的網,AOE網是帶權有向無環圖。邊代表活動,頂點代表 所有指向它的邊所代表的活動 均已完成 這一事件。由於整個工程只有一個起點和一個終點,網中只有一個入度為0的點(源點)和一個出度為0的點(匯點)。

相關時間的計算:

  • 事件最早發生時間:

即之前所有活動均完成所需的時間,由耗時最長的路徑決定。

具體判斷時可以在 直接前驅的最早發生時間 + 兩者之間活動時間 組成的集合中尋找最大值。

  • 事件的最晚發生時間:

事件的最晚發生時間以不影響工程最終完成時間為原則。

源點(匯點)的最早發生時間和最晚發生時間相同。

對與事件j的最晚發生時間可以采用:匯點的發生時間減去到j的最長路徑來求得。

  • 活動的最早開始時間:

活動的的開始時間與事件發生時間相互聯系,活動的最早發生時間為其起點事件的最早發生時間。

  • 活動的最晚開始時間

活動的最晚開始時間為其終點的最晚開始時間減去活動進行的時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM