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

拓扑排序介绍

拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。

这样说,可能理解起来比较抽象。下面通过简单的例子进行说明!

例如,一个项目包括A、B、C、D四个子部分来完成,并且A依赖于B和D,C依赖于D。现在要制定一个计划,写出A、B、C、D的执行顺序。这时,就可以利用到拓扑排序,它就是用来确定事物发生的顺序的。

在拓扑排序中,如果存在一条从顶点A到顶点B的路径,那么在排序结果中B出现在A的后面。

拓扑排序的算法图解

拓扑排序算法的基本步骤:

1. 构造一个队列Q(queue) 和 拓扑排序的结果队列T(topological);

2. 把所有没有依赖顶点的节点放入Q;

3. 当Q还有顶点的时候,执行下面步骤:

3.1 从Q中取出一个顶点n(将n从Q中删掉),并放入T(将n加入到结果集中);

3.2 对n每一个邻接点m(n是起点,m是终点);

3.2.1 去掉边;

3.2.2 如果m没有依赖顶点,则把m放入Q;

注:顶点A没有依赖顶点,是指不存在以A为终点的边。

用C语言编程实现拓扑排序,拓扑排序(一)之 C语言详解相关推荐

  1. 全国青少年软件编程(Scratch 3级)等级考试试卷----试题详解

    全国青少年软件编程(Scratch 3级)等级考试试卷----试题详解 一.选择题: 试题讲解:审题可知,该脚本要画出"三角形风车", 不难分析 1 :是要画出4个同样的轮廓,既: ...

  2. php mysql修改命令_PHP编程:mysql alter table命令修改表结构实例详解

    <PHP编程:mysql alter table命令修改表结构实例详解>要点: 本文介绍了PHP编程:mysql alter table命令修改表结构实例详解,希望对您有用.如果有疑问,可 ...

  3. shell编程系列23--shell操作数据库实战之mysql命令参数详解

    shell编程系列23--shell操作数据库实战之mysql命令参数详解mysql命令参数详解-u 用户名-p 用户密码-h 服务器ip地址-D 连接的数据库-N 不输出列信息-B 使用tab键代替 ...

  4. c语言编程杨辉三角前八行思路,C语言----(杨辉三角)

    用C语言编程打印出杨辉三角的前10行.如下图所示: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 ... ... 解法1: ...

  5. python语言编程入门先学什么-初学者先学习python语言还是C语言

    有人觉得应该从C语言开始入门,原因如下: 1.C语言是你上大学第一门接触的编程语言,可见它的重要性. 2.C语言是一种面向过程的语言,而Python是一种面向对象的解释型计算机程序设计语言.而你需要先 ...

  6. 换硬币c语言编程_为什么大多数程序员都会学C语言的5大原因!什么原因让你学不会?...

    一.c语言,不朽的传奇 从30年前到如今,一些流行的科技媒体上发表的编程语言排行榜,c语言始终稳定位于前三位,这是其他一种其他的编程语言都达不到的.c语言的江湖地位,不容撼动.虽历史悠久,却也是不朽的 ...

  7. linux下的c语言编程实验4,实验四-Linux下的C语言编程

    实验四Linux 下的 C 语言编程 四.实验内容 本实验要求在LINUX/UNIX环境下用C语言编写三个具体的SHELL命令,基本涉及了LINUX/UNIX文件系统中较为常用的有关文件操作的系统调用 ...

  8. c语言编程计算c上0下n,计算方法C语言编程讲解.doc

    计算方法C语言编程讲解 计算方法C语言编程 1.已知方程在区间[1,2]内有一根,试问用二分法求根,使其具有5位有效数字至少应二分多少次? [程序设计] clc;clear a=1;b=2;n=0; ...

  9. c语言编程高阶证书有用吗,信誉好:C语言编程高阶证什么报名流程那可以考取

    信誉好:C语言编程高阶证什么报名流程 建设及时输出专业的建设人才.2.2特点这种新式教育模式相对于其他的教育模式而言,主要具有以下几个特征:第一,这种教育方式中的主导者有所变化,在以往老师教.是行为教 ...

  10. C语言编程入门新手学习精华:这样学习C语言最有效

    1. C语言已死吗? 本资料描述的是使用C语言的高级技巧,力求将你的C语言能力由"基础"提升为"高级".但是学习态度胜过学习方法,在正式学习之前,有一个问题不吐 ...

最新文章

  1. php mysql study_phpStudy 升级 MySQL5.7
  2. 好记性不如烂博客之 Quartz InterruptableJob 可拦截任务
  3. 值得收藏!脑科学、脑机接口领域白皮书、研究报告汇总
  4. 实现一个简单的WebSocket聊天室
  5. 基于7个案例,分享我对“提示信息设计”的思考
  6. linux安装oem环境,【OEM】 oem12c_install_for_linux
  7. 使用腾讯云发送短信API接口实现(完整流程)
  8. Symbol Mc1000 快捷键 的 设置 事件 开发
  9. 前端学习(2999):vue+element今日头条管理--element导入
  10. NOI入门级:数据结构之线性表
  11. mini2440驱动分析之PWM
  12. rest-framework之版本控制
  13. Linux就这个范儿 第8章 我是Makefile
  14. Arrays.asList 方法注意事项
  15. idea中字体由繁体变简体
  16. 如何添加网络打印机-查看IP地址就可以
  17. 【Microsoft Office】免密破解Microsoft Word文档(.docx)的文档保护
  18. 微信浏览器视频播放探索
  19. 473. 火柴拼正方形
  20. android 多个aar合并,Android多模块构建合并aar解决方案

热门文章

  1. OHEM,Focal loss,GHM loss二分类pytorch代码实现(减轻难易样本不均衡问题)
  2. 针对0xc000007b问题的解决办法
  3. 2019 Revit二次开发企业
  4. 关于word自动生成目录,出现部分文字后面省略号疏密不一致的问题
  5. ppt计算机软件制作流程,电脑怎么制作ppt步骤
  6. 学习笔记 | 高效能团队打造
  7. 邮箱 POP3服务器(端口110) SMTP服务器(端口25)
  8. CT和MR影像实现 定位线功能
  9. 服务器设备管理系统,用勤哲Excel服务器实现设备管理系统
  10. 简单实现基于 STM32F407+ESP8266+RFID 的物联网小项目