关键路径法(Critical Path Method, CPM)是一种基于数学计算的项目计划管理方法,是网络图计划方法的一种,属于肯定型的网络图。关键路径法将项目分解成为多个独立的活动并确定每个活动的工期,然后用逻辑关系(结束-开始、结束-结束、开始-开始和开始结束)将活动连接,从而能够计算项目的工期、各个活动时间特点(最早最晚时间、时差)等。
头文件:CriticalPath.h
#ifndef CRITICALPATH_H
#define CRITICALPATH_H
#define MAXVEX 20
typedef int VertexType; //图的顶点数据类型
typedef struct edgenode{
int AdjVex; //顶点的下标值
int weight; //顶点的权值
struct edgenode* next; //指向下一个边集点
}EdgeNode;
typedef struct vertexnode{
VertexType data; //顶点信息
int in; //顶点的入度
EdgeNode *FirstEdge; //指向边集点
}VertexNode;
typedef struct graph{
VertexNode Vertex[MAXVEX]; //图的顶点集
int NumVertex,NumEdge; //图的顶点数和边数
}Graph;
void CreateGraph(Graph *G); //创建图
void TopoLogicalSort(Graph *G); //拓扑排序算法
void CriticalPath(Graph *G); //关键路径算法
#endif //CRITICALPATH_H
实现文件:CriticalPath.cpp
#include "CriticalPath.h"
#include <stdio.h>
#include <stdlib.h>
int *etv,*ltv; //事件最早发生时间和最迟发生时间数组
int top2; //用于Stack2的指针
int *Stack2; //用于存储拓扑序列的栈
void CreateGraph(Graph *G) //创建图
{
EdgeNode *e = NULL;
G->NumVertex = 10;
G->NumEdge = 13;
for(int i = 0;i < G->NumVertex;++i)
{
G->Vertex[i].data = i;
G->Vertex[i].in = 0;
G->V