一:引言

既然是一种排序,那么肯定是按照某种规则进行排序,那么这么想的话,先了解基本知识,再来实战演练
1. AOV网(Activity On Vertex Network)【顶点——表示活动】
是一个——有向无回路的图
顶点——表示活动
用弧——表示活动间的优先关系的有向图称为-顶点表示活动的网
即如果a->b,那么a是b的先决条件
求拓扑序列就是AOV
2.
用邻接矩阵存储时 每一列表示这个顶点的入度(有向图中)

二:上码

/* 1.AOV网(Activity On Vertex Network)【顶点——表示活动】是一个——有向无回路的图顶点——表示活动用弧——表示活动间的优先关系的有向图称为-顶点表示活动的网即如果a->b,那么a是b的先决条件求拓扑序列就是AOV2.用邻接矩阵存储时 每一列表示这个顶点的入度(有向图中)
*/
#include<bits/stdc++.h>
using namespace std;typedef struct GNode* PtrGraph;
typedef struct GNode{int Nv;int Ne;int Date[100][100];
}gnode;int cnt; //统计每个结点的入度
vector<int>v;//存入度的
vector<int>v1;//记录拓扑序列 //创建图
void creatrGraph(PtrGraph G){int N,M;cin >> N >> M;G->Nv = N;G->Ne = M;//矩阵初始化for( int i = 0; i < G->Nv; i++ ){for(int j = 0; j < G->Nv; j++ ){G->Date[i][j] = 0;}} //矩阵赋值for(int i = 0; i < G->Ne; i++ ){int a,b;cin >> a >> b;G->Date[a][b] = 1;//有向图  }
}
//求取每一列的数据和即为该顶点的入度
void degree(PtrGraph G){for(int j = 0; j < G->Nv; j++ ){cnt = 0;for( int i = 0; i < G->Nv; i++ ){if(G->Date[i][j] == 1)cnt++;}v.push_back(cnt);}
}
//求拓扑序列void topology( PtrGraph G ){queue<int>q;int count = 0;//用于计算度数为0的结点的个数 for( int i = 0; i < G->Nv; i++ ){if(v[i] == 0)q.push(i);//将入度为0的入队      } //这里就是处理每次去掉一个度数为0的点和其有关系的顶点度数减一 while( !q.empty() ){int temp = q.front();q.pop();v1.push_back(temp); count++;for( int j = 0; j < G->Nv; j++ ){//列 if( G->Date[temp][j] == 1  ){//在 temp 这一行中 等于 1的 j 需要入度减一     v[j]--;//其入度减一if( v[j] == 0 ){q.push(j);// 将入度为0的入度 }}}} if( G->Nv  == count ){//没有环 for( int i = 0; i < v1.size(); i++ )cout << v1[i] << ' ';   }else{cout << "此图有环"; } } int main(){PtrGraph G = (PtrGraph)malloc(sizeof(struct GNode));creatrGraph(G);degree(G);topology(G);} //5 6
//0 1
//0 2
//1 3
//2 1
//2 4
//3 4
//拓扑序列为:0 2 1 3 4


加油boy 冲呀

拓扑排序C++实现+实例解析(详解 兄弟们冲呀呀呀呀呀呀呀)相关推荐

  1. python 拓扑排序_拓扑排序(topsort)算法详解

    在图论中,由某个集合上的偏序得到全序的策略就是拓补排序算法.拓扑排序常出现在涉及偏序关系的问题中,例如时序的先后.事物的依赖等.针对这些问题拓扑排序通常能有效地给出可行解. 为了便于理解,我们先来看一 ...

  2. 用C语言编程实现拓扑排序,拓扑排序(一)之 C语言详解

    本章介绍图的拓扑排序.和以往一样,本文会先对拓扑排序的理论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 拓扑排序介绍 拓扑排序(Topological Order)是 ...

  3. vue build text html,Vue中v-text / v-HTML使用实例代码详解_放手_前端开发者

    废话少说,代码如下所述: /p> 显示123 /p> 补充:vuejs {{}},v-text 和 v-html的区别 {{message}} let app = new Vue({ el ...

  4. linux Shell(脚本)编程入门实例讲解详解

    linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...

  5. linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  6. android Json解析详解(详细代码)

    android Json解析详解(详细代码)   JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当 ...

  7. yii mysql 事务处理_Yii2中事务的使用实例代码详解

    前言 一般我们做业务逻辑,都不会仅仅关联一个数据表,所以,会面临事务问题. 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全 ...

  8. countif和sum套用_if函数嵌套countif、sumif函数实例操作详解 你需要学习了

    excel中if函数嵌套countif函数实例操作详解,需要了解if函数.countif函数.sumif函数字符串引用方式,isblank函数 操作方法 01 用扫描枪连接excel后将自动将货物名称 ...

  9. python装饰器实例-python装饰器实例大详解

    原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...

最新文章

  1. 竟有如此沙雕的代码注释!
  2. Understanding JVM Internals---不得不转载呀
  3. python内置函数源码_如何查看python内置函数源码
  4. loading initial ramdisk 卡住_驿站晨读 | 一城市多家快递“卡住了”!有快递网点直接建议:换别家吧......
  5. sysfs接口函数的建立_DEVICE_ATTR
  6. java gc的特性_Java12新特性 -- 可中断的G1 Mixed GC
  7. Linux中errno的含义
  8. DCMTK的Lib 引用顺序
  9. IDEA连接PostgreSQL数据库
  10. ASP.net中实现双表格同步缩放不变形
  11. Apache MiNa 实现多人聊天室
  12. 5加载stm32 keil_【STM32笔记】在SRAM、FLASH中调试代码的配置方法(附详细步骤)...
  13. 手拉手教你实现一门编程语言 Enkel, 系列 15
  14. c51单片机时钟程序汇编语言,51单片机数字钟汇编程序精选.docx
  15. 重发布实验、路由策略实验
  16. CPU与存储器连接习题
  17. 科学-天文学:天文学百科
  18. CentOS7-查看和设置日期时间
  19. [BZOJ3698]XWW的难题(有源汇有上下界的最大流)
  20. ctf镜子里面的世界_萌娃照镜子,演绎小脑袋大疑惑,“虚晃一枪”的模样简直萌化了...

热门文章

  1. Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器
  2. 阿里云ECS服务器多种实例规格如何选择
  3. Nginx -静态资源Web服务
  4. 关于用函数指针参数申请动态内存的问题
  5. c语言将十进制转化为二进制算法_base64算法初探即逆向分析
  6. 千万别让爸妈帮你P图......
  7. 【开学季限时免费】下载19880元大数据开发全链路教程(视频+源码)
  8. 中国人数学好,数学思维差?
  9. 每日一笑 | 程序员千万不能轻易去网吧!
  10. 16个让你烧脑让你晕的悖论