关键路径求解
1 #include "iostream" 2 #include "vector" 3 #include "stack" 4 using namespace std; 5 6 const int MaxNumVertex = 20; //最大顶点数 7 const int infinity = 65535;//无穷大 8 typedef int elementtype; //elementtype 为int 型 9 class graph{ 10 public: 11 graph(); 12 ~graph(); 13 elementtype insertvertex(elementtype v); //在图中增加一个顶点 14 elementtype insertedge(elementtype v,elementtype u,elementtype weight);//在图中增加一条从v顶点到u顶点的弧 15 elementtype firstadj(elementtype v);//求图g中顶点v的第一个邻接点 16 elementtype nextadj(elementtype v,elementtype m);//求图中顶点v的m邻接点之后的邻接点 17 elementtype firstpre(elementtype v);//求图中顶点v的第一个前驱 18 elementtype nextpre(elementtype v,elementtype m);//求图中顶点v的m前驱点之后的前驱点 19 elementtype degreein(elementtype v);//求图中顶点v的入度数 20 elementtype FindDegreein(elementtype ind[]);//各顶点的入度存放于入度数组中 21 elementtype degreeout(elementtype v);//求图中顶点v的入度数 22 elementtype FindDegreeout(elementtype oud[]);//各顶点的入度存放于入度数组中 23 elementtype EW(elementtype E[]);//最早发生时间的求解 24 bool CriticalPath();//关键路径 25 elementtype create();//创建图 26 int CurrentVertex;//当前顶点数 27 28 private: 29 elementtype vertex[MaxNumVertex];//顶点表 30 elementtype edge[MaxNumVertex][MaxNumVertex];//图中弧的类型 31 32 }; 33 34 /* 35 *初始化 36 */ 37 graph::graph() 38 { 39 CurrentVertex = 0; 40 int i,j; 41 for (i=MaxNumVertex-1;i>=1;i--) 42 { 43 for (j=MaxNumVertex-1;j>=1;j--) 44 { 45 edge[i][j] = 0; 46 47 } 48 } 49 50 } 51 52 /* 53 *在图中增加一个顶点 54 */ 55 elementtype graph::insertvertex(elementtype v) 56 { 57 //判断这个顶点是否已经存在 58 int i; 59 bool flags = true; 60 for(i=1; i<=CurrentVertex; i++) 61 { 62 if(vertex[i]==v) 63 { 64 flags = false; 65 break; 66 } 67 } 68 69 if(flags) 70 { 71 CurrentVertex++; 72 vertex[CurrentVertex] = v; 73 }else{ 74 cout<<<"顶点已经存在!"< "< <<"这条弧弧已经存在!"<