热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据结构——有向图(拓扑排序算法)

转自:http:blog.chinaunix.netuid-20384806-id-1954187.html对一个有向无环图(DirectedAcyclicGraph

转自:http://blog.chinaunix.net/uid-20384806-id-1954187.html

     对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。


     通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称
拓扑序列



  
注意:


     ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均是从左指向右的。


     ②若图中存在有向环,则不可能使顶点满足拓扑次序。


     ③一个DAG的拓扑序列通常表示某种方案切实可行。



下面是Java实现:

/*** 有方向图* */
public class DirectedGraph {private final int MAX_VERTS = 20;private Vertex[] vertexList; // array of verticesprivate int[][] adjMat; // adjacency matrixprivate int nVerts; // current number of verticesprivate char[] sortedArray; // sorted vert labels/*** 默认构造函数 初始化邻接矩阵*/public DirectedGraph() {vertexList = new Vertex[MAX_VERTS];sortedArray = new char[MAX_VERTS];// 图的邻接矩阵adjacency matrixadjMat = new int[MAX_VERTS][MAX_VERTS];nVerts = 0;for (int j = 0; j 0) {int delVertex = getNoSuccessorVertex();if (-1 == delVertex) {System.out.println("Error: This graph has cycles! It cannot be toplogical sorted.");return;}sortedArray[nVerts - 1] = vertexList[delVertex].label;deleteVertex(delVertex);}System.out.print("Topologically sorted order: ");for (int j = 0; j 0)// 大于0,表明有边指向其他点,说明有后继节点{isEdge = true;break; // OK,继续下一个节点}}if (false == isEdge)// 没有边,表明没有后继节点{return row;}}return -1;}/*** 删除一个节点* * @param delVertex*/public void deleteVertex(int delVertex) {if (delVertex != nVerts - 1)// 如果不是最后一个节点{// 在节点列表中删除这个节点,所有后面的节点前移一格for (int i = delVertex; i }





推荐阅读
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文介绍了蓝牙低功耗(BLE)中的通用属性配置文件(GATT),包括其角色、层次结构、属性、特性和服务等内容。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 本文探讨为何Request对象的外观设计被认为是精妙的,重点在于其如何利用门面模式确保数据安全,同时保持系统的高效交互。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 解析Java虚拟机HotSpot中的GC算法实现
    本文探讨了Java虚拟机(JVM)中HotSpot实现的垃圾回收(GC)算法,重点介绍了根节点枚举、安全点及安全区域的概念和技术细节,以及这些机制如何影响GC的效率和准确性。 ... [详细]
  • 春季职场跃迁指南:如何高效利用金三银四跳槽季
    随着每年的‘金三银四’跳槽高峰期的到来,许多职场人士都开始考虑是否应该寻找新的职业机会。本文将探讨如何制定有效的职业规划、撰写吸引人的简历以及掌握面试技巧,助您在这关键时期成功实现职场跃迁。 ... [详细]
  • 使用Matlab创建动态GIF动画
    动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
  • 本文详细介绍了在 Ubuntu 16.04 系统上安装和配置 PostgreSQL 数据库的方法,包括如何设置监听地址、启用密码加密、更改默认用户密码以及调整客户端访问控制。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
author-avatar
酒心灵20609
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有