图的顶点的拓扑排序,返回关键路径长度
2017-11-07 17:59
148 查看
函数int Toplogical(LinkedWDigraph G)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中图G表示一个具有n个顶点的AOE网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下:
AOE网
AOE网邻间表存储结构
Toplogical(LinkedWDigraph G)函数的具体实现如下。
typedef struct Gnode { int adjvex;//邻间节点的编号 int weight;//弧上的权值 struct Gnode *nextarc;//指向下一个弧的节点 }Gnode; typedef struct Adjlist {//邻接表的头结点类型 char vdata;//顶点的数据信息 struct Gnode *firstadj;//指向邻接表的第一个表节点 }Adjulist; typedef struct LinledWDigraph {//图的类型 int n, e;//图中顶点的个数和边数 struct Adjlist *head;//指向图中第一个顶点的邻接表的头节 }LinkedWDigraph;
AOE网
AOE网邻间表存储结构
Toplogical(LinkedWDigraph G)函数的具体实现如下。
int Toplogical(LinkedWDigraph G) { Gnode *p; int j, w, top =0 ; int *Stack, *ve, *indegree; ve = (int *)malloc((G.n + 1) * sizeof(int)); indegree = (int *)malloc((G.n + 1) * sizeof(int));//存储网中各顶点的入度 Stack = (int *)malloc((G.n + 1) * sizeof(int));//存储入度为0的定点的编号 if (!ve || !Stack || !indegree) printf("!!!!FALSE!!!!"); for (j = 1; j <= G.n; j++){//初始化 ve[j] = 0; indegree[j] = 0; } for (j = 0; j <= G.n; j++){//求网中各顶点的入度 p = G.head[j].firstadj; while (p){ indegree[p->adjvex]++; p = p->nextarc; }/*while*/ }/*for*/ for (int j = 0; j <= G.n; j++){ if (!indegree[j]) Stack[++top] = j; while (top > 0){ w = Stack[top--]; printf("%c", G.head[w].vdata); p = G.head[w].firstadj; while (p){ indegree[p->adjvex]--; if (!indegree[p->adjvex]) Stack[++top] = p->adjvex; if (ve[w]+p->weight>ve[p->adjvex]) ve[p->adjvex] = ve[w] + p->weight; p = p->nextarc; }/*while*/ }/*whlie*/ } return ve[w]; }/*Toplogical*/
相关文章推荐
- 06-4. How Long Does It Take (25)拓扑排序 求关键路径的最长的长度
- 详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)
- hdu 4109(拓扑排序 关键路径)
- 拓扑排序和关键路径
- 拓扑排序和关键路径
- 拓扑排序和关键路径
- 拓扑排序之关键路径(深度优先搜索)
- hdu 4109 拓扑排序 关键路径
- 数据结构 学习笔记(九):图(下):最小生成树(Prim,Kruskal 算法),拓扑排序 AOV,关键路径 AOE
- 拓扑排序和关键路径
- HDU 4109 拓扑排序(最短路思想)关键路径
- 最小生成树_AOV网(拓扑排序)_AOE网(关键路径)_最短路径
- 拓扑排序之关键路径
- 数据结构---->图的应用(拓扑排序,关键路径)
- 拓扑排序--关键路径
- 图(拓扑排序和关键路径)
- 数据结构---->图的应用(拓扑排序,关键路径)
- 求关键路径(包含邻接表的建立、拓扑排序)
- 拓扑排序和关键路径
- PAT 关键活动 拓扑排序-关键路径