拓扑排序

对一个有向图构造拓扑序列的过程称为拓扑排序(不唯一)

思想

  • 从AOV网选择一个没有前驱的顶点并输出
  • 从AOV网中删去该顶点,并且删去所有以该顶点为尾的弧
  • 重复上述两步,直到全部顶点都被输出,或AOV网中不存在没有前驱的顶点

设计数据结构

1、图的存储结构:采用邻接表存储,在顶点增加一个入度域

2、栈S存储所有无前驱的顶点

伪代码描述

1.栈S初始化;累加器count初始化;
2.扫描顶点表,将没有前驱(入度为0)的顶点压栈;
3.当栈S非空时循环
3.1 j=栈顶元素出栈;输出顶点j;count++;
3.2 对顶点j的每一个邻接点k执行:
3.2.1 将顶点k的入度减1;
3.2.2 如果顶点k入度为0,则将顶点k入栈;
4.if(count<G.vertexNum)输出有回路信息;

算法实现

void TopSort(ALGraph G)
{
S.top=0; //顺序栈S并初始化
count=0; //累加器count初始化
for(i=0;i<G.vertexNum;i++) //扫描顶点表
{
if(G.adjlist[i].in==0)
{
S.base[++S.top]=i; //将入度为0的顶点压栈
}
}
while(S.top!=0) //栈不为空,即还有入度为0的顶点时
{
j=S.base[S.top--]; //从栈中取出一个入度为0的顶点
cout<<G.adjlist[j].vertex;
count++;
p=G.adjlist[j].firstedge; //工作指针p初始化
while(p!=NULL) //扫描顶点表,找出顶点j的所有边
{
k=p->adjvex;
G.adjlist[k].in--; //将入度减1
if(G.adjlist[k].in==0) //如果为0,则将该顶点入栈
{
S.base[++S.top]=k;
}
p=p->nextarc;
}
}
if(count<vertexNum)
cout<<"有回路";
}

视频讲解

设计AOV网拓扑排序的算法的更多相关文章

  1. AOV拓扑排序实验总结-1

    AOV拓扑排序实验总结-1   实验数据:1.实验输入数据在input.txt文件中2.对于n是指有顶点n个,数据的结束标志是一行0 0.   实验目的:获取优秀的AOV排序算法模板   数据结构安排 ...

  2. region、xld有对应的字符串时,将region、xld按照行或列排序的算法实现

    用Halcon解码时,如果一张图里面有多个码,它通常可以把这些码都解出来,并且生成对应的解码结果字符串元组(也就是下面的DecodedDataStrings),如果有多个码,那么该元组就有多个元素. ...

  3. 贝叶斯个性化排序(BPR)算法小结

    在矩阵分解在协同过滤推荐算法中的应用中,我们讨论过像funkSVD之类的矩阵分解方法如何用于推荐.今天我们讲另一种在实际产品中用的比较多的推荐算法:贝叶斯个性化排序(Bayesian Personal ...

  4. 预排序遍历算法(MPTT)

    预排序遍历算法(MPTT) 算法详细: 对于所有的树的节点,都会有一个左值和一个右值,用于确定该节点的边界. 父节点的左值都会比子节点左值的小,右值都会比子节点的右值大. 没有父节点新增:即没有父节点 ...

  5. AOV网络和Kahn算法拓扑排序

    1.AOV与DAG 活动网络可以用来描述生产计划.施工过程.生产流程.程序流程等工程中各子工程的安排问题.   一般一个工程可以分成若干个子工程,这些子工程称为活动(Activity).完成了这些活动 ...

  6. 计数排序(counting-sort)——算法导论(9)

    1. 比较排序算法的下界 (1) 比较排序     到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界.   ...

  7. 产品列表页分类筛选、排序的算法实现(PHP)

    一.简单的单条件查询 工作都是从简单的开始,先从最简单的单表查询开始,这个一般用在首页以及一些比较独立的页面,只需要查找几个符合条件的产品展示出来即可,可以使用分页或者不使用分页.下面这个是产品控制器 ...

  8. [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...

  9. C/C++ 排序&&查找算法(面试)

    一.排序 1.冒泡排序 void BubbleSort(int array[],int n) { ; ; ; ; ;i<n - ;i++) /*外循环控制排序的总趟数*/ { flag = ; ...

随机推荐

  1. 通过HttpURLConnection下载图片到本地--批量下载

    一.背景说明 这篇文章讲述的是批量下载附件,在上一篇文章中,介绍了下载单个附件(上一篇文章). 二.实现思路 主要的实现思路:创建文件夹->文件夹中创建需要下载的文件->压缩文件夹-> ...

  2. python库--pandas--Series.str--字符串处理

    原数据 import pandas as pd a = pd.Series(['aSd', 'asd', 'dfd fsAsf sfs']) b = pd.Series([None, 'asd', ' ...

  3. EL-ADMIN学习笔记

    一,支持接口限流,避免恶意请求导致服务层压力过大 常见的限流功能一般有两个关注点: 1.限流原则,即以什么样的条件对请求进行识别以及放行.常见的作法是给予每个调用API的系统不同的唯一编码,用于监控某 ...

  4. Docker系列(24)- 实战:DockerFile制作tomcat镜像

    实战:DockerFile制作tomcat镜像 step-1 准备镜像文件 tomcat压缩包,jdk压缩包! step-2 编写dockerfile文件,官方命名Dockerfile,build会自 ...

  5. Docker系列(18)- 具名挂载和匿名挂载

    容器数据卷挂载方式 容器的数据卷可以看成就是容器的挂载方式:一个宿主机有多个容器,多个容器挂载方式不同,因此宿主机就有多个卷 每一个挂载方式在宿主机上都有一个名称,即卷名 宿主机如何查看这些卷,对使用 ...

  6. Jmeter系列(13)- 数据库操作之JDBC Connection Configuration配置元件、JDBC Request取样器

    Jmeter常见操作数据库场景 准备.制造测试数据 获取.查询测试数据 数据库数据作为参数引用 清理测试环境.删除过程数据 数据库压测 Jmeter操作数据库环境准备 已经安装好的数据库,比如MySq ...

  7. Shell系列(27)- 条件判断之两个整数比较

    两个整数之间比较 Liunx中,都是字符型,但是加了数值比较的选项,所以自动将他们转换成了整数型进行比较,不需要对这些参数进行变量转换或者重新声明 测试选项 作用 整数1 -eq 整数2 判断整数1是 ...

  8. layui左右移动tab标签模版

    {% load staticfiles %} <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  9. flask项目在Linux运行

    依赖安装: 1.flask 2.flask_sqlalchemy --需要安装flask-mysqldb  安装时提示mysql_config not found ,使用:yum install my ...

  10. 关于ModuleNotFoundError: No module named 'xxx' 模块导入失败问题

    我在执行数据库迁移命令的时候pycharm报错,提示ModuleNotFoundError: No module named 'ckeditor',但是我确实是导进来了,而且这个包也从settings ...