数据结构(拓扑排序和关键路径)
2021-01-24 06:18
标签:邻接 排序算法 cal 存储 顶点 就会 针对 exe 统计 拓扑排序 拓扑序列: 设G=(V,E)是一个具有n个顶点的有向图,V中顶点序列V1,V2,......,Vn满足若从顶点Vi到Vj有一条路径,则在顶点序列中顶点Vi必须在顶点Vj之前。则称这样的顶点序列为一个拓扑序列 拓扑排序 对一个无环有向图(AOV网)构造拓扑序列的过程 方法 因为要删除点和边,所以用邻接表较为方便 关键路径 AOE网 在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网。把没入度的顶点称为始点或源点,没有出度的顶点称为终点或汇点 关键路径就是决定整个工程时间的路径;因为工程中有些步骤要在一些步骤完成的基础上才能进行,而有些则不需要,这种没有制约的步骤就可以同时进行,而决定整个整个工程时间的就是这种相互制约的步骤的最长时间和 思路 正向求处事件的最早发生时间,和反向求出事件最晚发生时间;然后根据事件的etv、ltv求出活动的ete和lte;【ete==lte的活动,为关键活动,关键活动组成的路径是关键路径】 注:etv和ltv是针对事件的,ete和lte是针对活动的;并且根据etv、ltv和活动需要的时间是可以求出活动ete和lte的;【活动:etv就是弧尾顶点事件的最早发生时间;lte就是弧头顶底事件ltv(最晚时间)-活动所需时间】 数据结构(拓扑排序和关键路径) 标签:邻接 排序算法 cal 存储 顶点 就会 针对 exe 统计 原文地址:https://www.cnblogs.com/TianLiang-2000/p/12866389.html
1 #define MAXVEX 10
2
3 //边表结点声明
4 typedef struct EdgeNode{
5 int adjvex;
6 struct EdgeNode *next;
7 }EdgeNode;
8
9 //顶点结点声明
10 typedef struct VertexNode{
11 int in;//顶点入度
12 int data;
13 EdgeNode *firstedge;
14 }VertexNode,AdjList[MAXVEX];
15
16 typedef struct{
17 AdjList adjList;
18 int numVertexes,numEdges;
19 }graphAdjList,* GraphAdjList;
20
21 //拓扑排序算法
22 //若GL无回路,则会输入拓扑排序序列并返回OK,否则返回ERROE
23 Status TopoLogicalSort(GraphAdjList GL){
24 EdgeNode *e;
25 int i,k,gettop;
26 int top=0;//用于栈指针下标索引
27 int count=0;//用于统计输出顶点的个数
28 int *stact;//用于存储入度为0的顶点
29
30 stact=(int *)malloc(GL->numVertexes*sizeof(int));
31
32 for(i=0;i