關鍵路徑:
即決定一項工程的完成時間的路徑。
如下圖所示,是一輛汽車的生產流程,其中外殼、發動機、輪子等的生產過程都是可以並行進行的,但是傳送機生產需要的時間最長,而只有所有零部件生產完成才才能進行下一步,因此圖中用紅色加粗的那一條路徑即為該工程的關鍵路徑(即決定工程的實際完成時間的路徑)。
criticalpath演算法理解:
此演算法是在拓撲排序的基礎上進行的,首先對aoe圖完成拓撲排序,並將排序結果儲存在棧中(**中是棧stack2)。
在拓撲排序完成之後,計算各個事件(頂點)、活動(弧)的etv、ltv、ete、lte的值。
其中lte = ete的活動(弧)即為關鍵活動,關鍵活動連線成為關鍵路徑。
**如下:(有詳細注釋)(較容易理解)
/* 弧 edge */
typedef struct edgenode
edgenode;
/* 頂點 node */
typedef struct vertexnode
vertexnode, adjlist[maxvex];
/* 鄰接表 */
typedef struct
graphadjlist, *graphadjlist;
int *etv, *ltv;
int *stack2; // 用於儲存拓撲序列的棧
int top2; // stack2的棧頂指標
/* 拓撲排序演算法 */
/* 若gl無迴路 則輸出拓撲排序序列並返回ok 否則返回error */
/* 拓撲排序僅改變這些頂點的排列順序(這裡是按順序存放在stack2中) 而並不改變頂點之間的連線關係 */
status topologicalsort(graphadjlist gl)
} top2 = 0;
etv = (int *)malloc(gl->numvertexes*sizeof(int));
/* 初始化etv都為0 */
for( i=0; i < gl->numvertexes; i++ )
stack2 = (int *)malloc(gl->numvertexes*sizeof(int));
/* 拓撲排序 */
while( 0 != top )
/* 如果某乙個頂點有多個入度 則該事件需要等待這幾個活動都完成才能有效 */
/* 故這裡判斷如果有更長的路徑 則替代原本的etv */
if( (etv[gettop]+e->weight) > etv[k] )
}} /* 如果count小於頂點數 說明存在環 */
if( count < gl->numvertexes )
else }
/* 求關鍵路徑 */
/* gl為有向圖 輸出gl的各項關鍵活動 */
void criticalpath(graphadjlist gl)
/* 從匯點倒推計算ltv */
while( 0 != top2 )
}} /* 通過etv和ltv 求ete和lte */
for( j=0; j < gl->numvertexes; j++ )}}}
——cloud over sky
——2020/3/12
Codeup關鍵路徑 關鍵路徑
時間限制 1 sec 記憶體限制 128 mb 提交 261 解決 90 提交 狀態 討論版 命題人 外部匯入 描述 圖的連線邊上的資料表示其權值,帶權值的圖稱作網。上圖可描述為頂點集為 a,b,c,d,e 邊集及其權值為 始點,終點 權值 a b 3 a c 2 b d 5 c d 7 c e 4...
關鍵路徑法
關鍵路徑法 critical path method,cpm 又稱為要徑法,是計畫專案活動中用到的一種算術方法。1 對於有效的計畫管理而言,關鍵路徑是乙個十分重要的工具。與計畫評核術 project evaluation and reviewtechniqu,pert 非常類似。要徑法所使用的估計作...
關鍵路徑法
aoe網 在乙個表示工程的帶權有向圖中,用頂點表示事件,用有向邊表示活動,邊上的權值表示活動的持續時間,稱這樣的有向圖叫做邊表示活動的網,簡稱aoe網。aoe網中沒有入邊的頂點稱為始點 或源點 沒有出邊的頂點稱為終點 或匯點 aoe網的性質 只有在某頂點所代表的事件發生後,從該頂點出發的各活動才能開...