有向无环图及其应用(拓扑排序)
来源:互联网 发布:广州多益网络面试 编辑:程序博客网 时间:2024/06/13 05:38
// func7-1.cpp algo7-4.cpp和algo7-5.cpp要调用void FindInDegree(ALGraph G,int indegree[]){ // 求顶点的入度,算法7.12、7.13调用int i;ArcNode *p;for(i=0;i<G.vexnum;i++)indegree[i]=0; // 赋初值for(i=0;i<G.vexnum;i++){p=G.vertices[i].firstarc;while(p){indegree[p->data.adjvex]++;p=p->nextarc;}}}
// algo7-4.cpp 输出有向图的一个拓扑序列。实现算法7.12的程序#include"c1.h"#define MAX_NAME 5 // 顶点字符串的最大长度typedef int InfoType;typedef char VertexType[MAX_NAME]; // 字符串类型#include"c7-21.h" // 邻接表存储结构#include"bo7-2.cpp" // 邻接表存储结构的基本操作#include"func7-1.cpp"typedef int SElemType; // 栈元素类型#include"c3-1.h" // 顺序栈的存储结构#include"bo3-1.cpp" // 顺序栈的基本操作Status TopologicalSort(ALGraph G){ // 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK,// 否则返回ERROR。算法7.12int i,k,count=0; // 已输出顶点数,初值为0int indegree[MAX_VERTEX_NUM]; // 入度数组,存放各顶点当前入度数SqStack S;ArcNode *p;FindInDegree(G,indegree); // 对各顶点求入度indegree[],在func7-1.cpp中InitStack(S); // 初始化零入度顶点栈Sfor(i=0;i<G.vexnum;++i) // 对所有顶点iif(!indegree[i]) // 若其入度为0Push(S,i); // 将i入零入度顶点栈Swhile(!StackEmpty(S)) // 当零入度顶点栈S不空{Pop(S,i); // 出栈1个零入度顶点的序号,并将其赋给iprintf("%s ",G.vertices[i].data); // 输出i号顶点++count; // 已输出顶点数+1for(p=G.vertices[i].firstarc;p;p=p->nextarc){ // 对i号顶点的每个邻接顶点k=p->data.adjvex; // 其序号为kif(!(--indegree[k])) // k的入度减1,若减为0,则将k入栈SPush(S,k);}}if(count<G.vexnum) // 零入度顶点栈S已空,图G还有顶点未输出{printf("此有向图有回路\n");return ERROR;}else{printf("为一个拓扑序列。\n");return OK;}}void main(){ALGraph f;printf("请选择有向图\n");CreateGraph(f); // 构造有向图f,在bo7-2.cpp中Display(f); // 输出有向图f,在bo7-2.cpp中TopologicalSort(f); // 输出有向图f的1个拓扑序列}
代码的运行结果如下:
请选择有向图
请输入G的类型(有向图:0,有向网:1,无向图:2,无向网:3): 0(见图762)
请输入G的顶点数,边数: 6,8
请输入6个顶点的值(<5个字符):
V1 V2 V3 V4 V5 V6
请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):
V1 V2
V1 V3
V1 V4
V3 V2
V3 V5
V4 V5
V6 V4
V6 V5
有向图(见图763)
6个顶点:
V1 V2 V3 V4 V5 V6
8条弧(边):
V1→V4 V1→V3 V1→V2
V3→V5 V3→V2
V4→V5
V6→V5 V6→V4
V6 V1 V3 V2 V4 V5 为一个拓扑序列。
图764 显示了运行algo7-4.cpp 的过程。其中的S 栈也可用队列代替,这样将输出
一个不同的拓扑序列。
0 0
- 有向无环图及其应用、拓扑排序
- 有向无环图及其应用(拓扑排序)
- 有向无环图- CSU1804(拓扑排序)
- 有向无环图及其应用
- 拓扑排序(判断是否是有向无环图)
- csu1804: 有向无环图(拓扑排序+dp)
- 有向无环图的拓扑排序
- 有向无环图的拓扑排序
- 有向无环图的拓扑排序
- CSU 1804: 有向无环图 (拓扑排序)
- CSU1804:有向无环图 拓扑排序
- 算法 有向无环图 拓扑排序
- 【图论】有向无环图的拓扑排序
- 拓扑排序及其应用
- 有向图--拓扑排序
- 图之有向无环图的应用--拓扑排序算法的实现
- 图(有向图)的应用——拓扑排序
- 拓扑排序(判断有向图是否有回路)
- 完整思路的cocos2dx生成Android APK文件的步骤操作
- ViewPager And Fragment
- 周末小测——F(HDU 1415 Jugs(灌水问题))
- [Clojure] Data Collection and Data Analysis on the music of www.xiami.com - Part 1
- linux内核编译
- 有向无环图及其应用(拓扑排序)
- Linux服务器开发之:stat(),fstat(),lstat()详细介绍+案例演示
- Cocos2d-x内置粒子系统
- shell局部变量和全局变量
- 数据结构 第一章 绪论
- 关键路径
- 不要一辈子靠技术混饭吃
- fedora下面安装Openoffice
- Linux,扇区,块,文件系统,目录中的记录项