简介
- 几个问题:
-
关键路径和拓扑排序求什么?
求关键路径。拓扑排序是求关键路径中的一环。 -
关键路径是什么?
举例来说,比如在造车过程中有如下的活动,那么哪条路径是关键路径呢?
就是在所有路径中耗时最长的那条:开始——发动机完成——集中——组装完成,这条路径。
-
如何判断是关键路径?
ete == lte的活动为关键活动,其形成的路径为关键路径。
提示:下附代码,亲测可用
1. 拓扑排序
拓扑排序就是对所有节点进行排序,保证节点的连接顺序都是从前往后的,没有从后往前的。
代码如下:
#include "iostream"
using namespace std;
#define MAXVEX 20
typedef struct EdgeNode
{
int adjvex;
struct EdgeNode* next;
}EdgeNode;
typedef struct VertexNode
{
int in;
int data;
EdgeNode* firstedge;
}VertexNode, AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numVertexes, numEdges;
}graphAdjList, *GraphAdjList;
void CreateGraph(GraphAdjList GL, int vnum, int anum)
{
GL->numVertexes = vnum;
GL->numEdges = anum;
GL->adjList[1].in = 0;
GL->adjList[1].data = 1;
EdgeNode* tmp_node_1 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_1->adjvex = 2;
tmp_node_1->next = NULL;
GL->adjList[1].firstedge = tmp_node_1;
EdgeNode* tmp_node_2 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_2->adjvex = 3;
tmp_node_2->next = NULL;
GL->adjList[1].firstedge->next = tmp_node_2;
EdgeNode* tmp_node_3 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_3->adjvex = 4;
tmp_node_3->next = NULL;
GL->adjList[1].firstedge->next->next = tmp_node_3;
GL->adjList[2].in = 2;
GL->adjList[2].data = 2;
GL->adjList[2].firstedge = NULL;
GL->adjList[3].in = 2;
GL->adjList[3].data = 3;
EdgeNode* tmp_node_4 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_4->adjvex = 6;
tmp_node_4->next = NULL;
GL->adjList[3].firstedge = tmp_node_4;
EdgeNode* tmp_node_5 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_5->adjvex = 7;
tmp_node_5->next = NULL;
GL->adjList[3].firstedge->next = tmp_node_5;
EdgeNode* tmp_node_6 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_6->adjvex = 9;
tmp_node_6->next = NULL;
GL->adjList[3].firstedge->next->next = tmp_node_6;
EdgeNode* tmp_node_7 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_7->adjvex = 10;
tmp_node_7->next = NULL;
GL->adjList[3].firstedge->next->next->next = tmp_node_7;
GL->adjList[4].in = 2;
GL->adjList[4].data = 4;
EdgeNode* tmp_node_8 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_8->adjvex = 7;
tmp_node_8->next = NULL;
GL->adjList[4].firstedge = tmp_node_8;
EdgeNode* tmp_node_9 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_9->adjvex = 8;
tmp_node_9->next = NULL;
GL->adjList[4].firstedge->next = tmp_node_9;
EdgeNode* tmp_node_10 = (EdgeNode*)malloc(sizeof(EdgeNode));
tmp_node_10->adjvex = 10;
tmp_node_10->next = NULL;
GL->adjList[4].firstedge->next->next = tmp_node_10;
GL->adjList[5].in = 1;
GL->adjList