快速求解方法:
数据结构—图,一分钟求解关键路径!
代码实现
代码实现
/*
用邻接表实现AOE网的关键路径算法(懒猫老师教学去掉模板的版本)
可直接粘贴的输入:
9 11
0 1 6
0 2 4
0 3 5
1 4 1
2 4 1
3 5 2
4 6 9
4 7 7
5 7 4
6 8 2
7 8 4
*/
#include <iostream>
#include <stdio.h>
using namespace std;
const int MAX_VERTEX = 30; //图的最大顶点数
struct ArcNode {
/*边表*/
int weight; //增加权值分量,代表活动时间=====
int adjvex;
ArcNode *next;
};
struct VertexNode {
/*顶点表*/
int in; //增加入度字段-----
char vertex;
ArcNode *firstEdge;
};
class ALGraph {
private:
VertexNode *adjList; //邻接表
int vertexNum, arcNum;
int *ve, *vl; //ve数组是事件最早发生时间,vl事件最迟发生时间(数组长度跟顶点数相等)=====
public:
ALGraph(char v[], int n, int e);
~ALGraph();
void inputEdges();
bool setEdge(int vi, int vj, int weight);
void displayData();
bool TopologicalSort(int result[], int &count); //拓扑排序
bool CriticalPath(); //求关键路径
};
ALGraph:: ALGraph(char v[], int n, int e) {
vertexNum = n;
arcNum = e;
adjList = new VertexNode[vertexNum];
for (int i = 0; i < vertexNum; i++) {
//输入顶点信息,初始化顶点表
adjList[i].in = 0; //增加in的初始化-----
adjList[i].vertex = v[