拓扑排序C++实现+实例解析(详解 兄弟们冲呀呀呀呀呀呀呀)
一:引言
既然是一种排序,那么肯定是按照某种规则进行排序,那么这么想的话,先了解基本知识,再来实战演练
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++实现+实例解析(详解 兄弟们冲呀呀呀呀呀呀呀)相关推荐
- python 拓扑排序_拓扑排序(topsort)算法详解
在图论中,由某个集合上的偏序得到全序的策略就是拓补排序算法.拓扑排序常出现在涉及偏序关系的问题中,例如时序的先后.事物的依赖等.针对这些问题拓扑排序通常能有效地给出可行解. 为了便于理解,我们先来看一 ...
- 用C语言编程实现拓扑排序,拓扑排序(一)之 C语言详解
本章介绍图的拓扑排序.和以往一样,本文会先对拓扑排序的理论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 拓扑排序介绍 拓扑排序(Topological Order)是 ...
- vue build text html,Vue中v-text / v-HTML使用实例代码详解_放手_前端开发者
废话少说,代码如下所述: /p> 显示123 /p> 补充:vuejs {{}},v-text 和 v-html的区别 {{message}} let app = new Vue({ el ...
- linux Shell(脚本)编程入门实例讲解详解
linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...
- linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- android Json解析详解(详细代码)
android Json解析详解(详细代码) JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当 ...
- yii mysql 事务处理_Yii2中事务的使用实例代码详解
前言 一般我们做业务逻辑,都不会仅仅关联一个数据表,所以,会面临事务问题. 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全 ...
- countif和sum套用_if函数嵌套countif、sumif函数实例操作详解 你需要学习了
excel中if函数嵌套countif函数实例操作详解,需要了解if函数.countif函数.sumif函数字符串引用方式,isblank函数 操作方法 01 用扫描枪连接excel后将自动将货物名称 ...
- python装饰器实例-python装饰器实例大详解
原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...
最新文章
- 竟有如此沙雕的代码注释!
- Understanding JVM Internals---不得不转载呀
- python内置函数源码_如何查看python内置函数源码
- loading initial ramdisk 卡住_驿站晨读 | 一城市多家快递“卡住了”!有快递网点直接建议:换别家吧......
- sysfs接口函数的建立_DEVICE_ATTR
- java gc的特性_Java12新特性 -- 可中断的G1 Mixed GC
- Linux中errno的含义
- DCMTK的Lib 引用顺序
- IDEA连接PostgreSQL数据库
- ASP.net中实现双表格同步缩放不变形
- Apache MiNa 实现多人聊天室
- 5加载stm32 keil_【STM32笔记】在SRAM、FLASH中调试代码的配置方法(附详细步骤)...
- 手拉手教你实现一门编程语言 Enkel, 系列 15
- c51单片机时钟程序汇编语言,51单片机数字钟汇编程序精选.docx
- 重发布实验、路由策略实验
- CPU与存储器连接习题
- 科学-天文学:天文学百科
- CentOS7-查看和设置日期时间
- [BZOJ3698]XWW的难题(有源汇有上下界的最大流)
- ctf镜子里面的世界_萌娃照镜子,演绎小脑袋大疑惑,“虚晃一枪”的模样简直萌化了...