#include "stdio.h"
#include "stdlib.h"
#include "io.h"
#include "math.h"
#include "time.h"
#define ok 1
#define error 0
#define true 1
#define false 0
#define maxedge 30
#define maxvex 30
#define infinity 65535
typedef int status; /* status是函式的型別,其值是函式結果狀態**,如ok等 */
int *etv,*ltv; /* 事件最早發生時間和最遲發生時間陣列,全域性變數 */
int *stack2; /* 用於儲存拓撲序列的棧 */
int top2; /* 用於stack2的指標 */
/* 鄰接矩陣結構 */
typedef struct
mgraph;
/* 鄰接表結構****************** */
typedef struct edgenode /* 邊表結點 */
edgenode;
typedef struct vertexnode /* 頂點表結點 */
vertexnode, adjlist[maxvex];
typedef struct
graphadjlist,*graphadjlist;
/* **************************** */
void createmgraph(mgraph *g)/* 構件圖 */
for (i = 0; i < g->numvertexes; i++)/* 初始化圖 */ }
g->arc[0][1]=3;
g->arc[0][2]=4;
g->arc[1][3]=5;
g->arc[1][4]=6;
g->arc[2][3]=8;
g->arc[2][5]=7;
g->arc[3][4]=3;
g->arc[4][6]=9;
g->arc[4][7]=4;
g->arc[5][7]=6;
g->arc[6][9]=2;
g->arc[7][8]=5;
g->arc[8][9]=3;
}/* 利用鄰接矩陣構建鄰接表 */
void createalgraph(mgraph g,graphadjlist *gl)
for(i=0;iadjvex=j; /* 鄰接序號為j */
e->weight=g.arc[i][j];
e->next=(*gl)->adjlist[i].firstedge; /* 將當前頂點上的指向的結點指標賦值給e */
(*gl)->adjlist[i].firstedge=e; /* 將當前頂點的指標指向e */
(*gl)->adjlist[j].in++;
}} } }
/* 拓撲排序 */
status topologicalsort(graphadjlist gl)
}
printf("\n");
if(count < gl->numvertexes)
return error;
else
return ok;
}/* 求關鍵路徑,gl為有向網,輸出g的各項關鍵活動 */
void criticalpath(graphadjlist gl)
}
printf("ltv:\t");
for(i=0; inumvertexes; i++)
printf("%d -> ",ltv[i]);
printf("\n");
for(j=0; jnumvertexes; j++) /* 求ete,lte和關鍵活動 */
}}int main(void)
資料結構 關鍵路徑
aov aoe都是有權無向圖,aov邊不帶權值,aoe帶權值。關鍵路徑是aoe中,開始頂點到結束頂點的所有路徑中,具有最大路徑長度的路徑成為關鍵路徑,路徑上的點是關鍵活動。1 關鍵路徑如果有多條,至提高一條關鍵路徑上的關鍵活動並不能縮短工期,必須要加快所有關鍵路徑上的關鍵活動才能加快工期。2 關鍵路...
《大話資料結構》之關鍵路徑演算法
關鍵路徑演算法是在aoe網中找出完成所有活動耗時最長的路徑的方法。程式中涉及的結構 typedef char vertextype typedef int edgetype 鄰接節點結構 typedef struct edgenode edgenode 頂點節點列表 typedef struct v...
PTA 資料結構與演算法 關鍵路徑
1.aoe圖的關鍵路徑就是最長的路徑tf 2.aoe圖的權值最大的邊 活動 一定是關鍵活動。tf 3.在aoe 網工程中,減少任一關鍵活動上的權值後,整個工期也就會相應的減小。tf 4.aoe 網工程工期為關鍵活動上的權之和。tf 5.在關鍵路徑上的活動都是關鍵活動,而關鍵活動也必在關鍵路徑上。tf...