計算工程完成的關鍵路徑

2021-09-29 21:52:47 字數 2555 閱讀 3503

說明: aoe 網路是有向無環加權圖,其中頂點表示事件,弧表示活動,權表示活動持續的時間,通常可以用來估算工程完成的時間,即圖中從開始點到結束點之間最長的路徑對應的時間。請完成乙個程式,完成下列任務:

1 、計算 aoe 網路對應的拓撲排序。如果排序結果不唯一,請輸出按照從小到大的順序排列的結果。從小到大的順序就是輸入的節點序列順序(參見下面關於輸入格式的說明)。如圖1中滿足要求的拓撲排序是: a-b-c-d-e-f-g-h-k ,圖2中滿足要求的拓撲排序是:v1-v3-v5-v2-v6-v4-v7-v8-v9

2 、計算 aoe 網路的關鍵路徑。注意關鍵路徑可能不唯一,要求輸出所有的關鍵路徑。同樣,按照是按照從小到大的順序輸出。例,如果得到兩條關鍵路徑,分別是0-1-3-6-8-9和0-1-3-4-5-8-9,那麼先輸出後一條路徑,因為兩條路徑中前三個節點相同,而後一條路徑第四個節點的編號小。

測試用例的輸入輸出格式說明:

輸入:節點的個數,邊的條數;

各個節點的名稱序列

邊: < 起點 , 終點 , 權值 > 。說明起點和終點是在各個點在輸入序列中的位置,如圖1中邊 表示為 <0,1,6> 。

輸出:拓撲排序;

關鍵路徑

測試用例0是與圖1相對應的,測試用例1是與圖2相對應的。

過程過於繁瑣了,比如沒必要用頂堆和兩次tp,但是寫的時候思路不夠清晰…

其實大部分思考過程都在書上了,問題在於如何以正確的格式輸出,這裡借鑑了一下學長的思路,在建立鄰接表的時候就先排好序,後來輸出的順序就能保持一致了,因為測試用例比較短,所以氣泡排序就能解決問題~

#include #pragma warning(disable:4996)

using namespace std;

int indegree[100];

int outdegree[100];

int testindegree[100];

int ve[100];

int vl[100];

int top[100][100];

int topo[55], path[100];

stack t;

priority_queue, greater> que[100];//這一步不必要,建立的原因是最初不知道先排序的思路時想到的一種排序方式

typedef struct node

edgenode;

typedef struct vnode

vertexnode;

typedef struct

linkedgraph;

linkedgraph g;

//上面三項是建立鄰接表必不可少的

void creat(linkedgraph* g)//建立鄰接表,其中本題需要權值,若不需要權值也可通過此方式建立

else

g->adjlist[i].firsteage = null;

} g->adjlist[flag1].vertex[flag2] = 0;

for (k = 0; k < g->e; k++) }

edgenode* m, * n;

for (k = 0; k < g->n; k++) }}

//入度和出度測量~可以認為是度的測量

void indegree(linkedgraph* g)

outdegree[i] = outd; }}

//第一次tp輸出拓撲路徑~參考《資料結構》

void toplogicalsort(linkedgraph* g)

} if (s.empty())

else

cout << "-"; }}

bool toplogicalorder(linkedgraph* g) //第二次tp,其實繁瑣化了,完全可以併入第乙個中

} if (count < g->n)

else

return true;

}void printpath(int top, int end, linkedgraph* g) //遞迴輸出法

for (p = g->adjlist[u].firsteage; p != null; p = p->next) }}

void criticalpath(linkedgraph* g)//還是參見《資料結構》

path[0] = topo[0];//path其實不必要

printpath(1, topo[g->n - 1], g);

}int main()

toplogicalsort(&g);

criticalpath(&g);

return 0;

}

14 計算工程完成的關鍵路徑

說明 aoe 網路是有向無環加權圖,其中頂點表示事件,弧表示活動,權表示活動持續的時間,通常可以用來估算工程完成的時間,即圖中從開始點到結束點之間最長的路徑對應的時間。請完成乙個程式,完成下列任務 1 計算 aoe 網路對應的拓撲排序。如果排序結果不唯一,請輸出按照從小到大的順序排列的結果。從小到大...

H2 計算工程完成的關鍵路徑

說明 aoe 網路是有向無環加權圖,其中頂點表示事件,弧表示活動,權表示活動持續的時間,通常可以用來估算工程完成的時間,即圖中從開始點到結束點之間最長的路徑對應的時間。請完成乙個程式,完成下列任務 1 計算 aoe 網路對應的拓撲排序。如果排序結果不唯一,請輸出按照從小到大的順序排列的結果。從小到大...

關鍵路徑的計算

從源點到匯點路徑長度最長的路徑為該project的關鍵路徑,即關鍵路徑可以保證全部路徑的活動都可以完畢。ok,再次進入我們的作業題 例如以下圖所看到的的aoe網 弧上權值代表活動的持續天數 1 完畢此project最少所須要多少天?2 哪些是關鍵活動,在圖中表示出關鍵路徑 我們先計算最早發生時間ve...