图的拓扑排序

这篇具有很好参考价值的文章主要介绍了图的拓扑排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        拓扑排序是一个有向无环图(有向图、弧不形成闭环)的所有顶点的线性序列。该线性序列中,图的每个顶点只出现一次,若顶点A到顶点B之间存在有向弧<v1,v2>,则顶点A一定在顶点B前面。

 

图的拓扑排序,图,数据结构,图论

 

        图的拓扑排序实现很简单,基本操作思想:

        1、开始时用一个辅助数组记录各顶点的入度,入度为0的顶点全部入队(先进先出、输入顶点)

        2、将入度为0的顶点逐个出队,出队时,将以他们为弧尾的弧的弧头的入度-1,若入度为0,则将弧头入队。重复入队、出队,直到所有顶点出队完。 

图的拓扑排序,图,数据结构,图论

        图中只有顶点A的入度为0,将顶点A入队;将A出队,同时减少以顶点A为弧尾的弧的弧头(图中为顶点2、顶点4)的入度。发现顶点2的入度为0,将顶点2入队。如此重复入队、出队,直到所有顶点输出完。

图的拓扑排序,图,数据结构,图论

 

 

图的拓扑排序,图,数据结构,图论

 最终的到拓扑排序结果:1、2、4、3、5(不唯一)文章来源地址https://www.toymoban.com/news/detail-540370.html

// 无回路的有向图
// 拓扑排序
void TopologicaSort(ALGraph &graph) {
	int Degree[MAX_VERTEX_NUM];	// 记录各顶点当前的入度
	for (int i = 0; i < graph.ver_num; ++i) {
		Degree[i] = 0;
	}
	for (int i = 0; i < graph.ver_num; ++i) {
		ArcNode* T = graph.adj[i].first;
		while (T) {
			++Degree[T->adjIndex];	// 邻接顶点入度+1
			T = T->Next;
		}
	}
	queue<verType> VERTEX;
	for (int i = 0; i < graph.ver_num; ++i) {
		if (0 == Degree[i]) {
			VERTEX.push(graph.adj[i].vertex);	// 入度为0的顶点入队
			break;
		}
	}
	verType vex;
	int index;
	while (!VERTEX.empty()) {
		vex = VERTEX.front();
		VERTEX.pop();
		cout << vex << " ";
		index = LocateVertex(graph, vex);
		if (index < 0) break;
		ArcNode* T = graph.adj[index].first;
		while (T) {
			--Degree[T->adjIndex];
			if (0 == Degree[T->adjIndex]) VERTEX.push(graph.adj[T->adjIndex].vertex);
			T = T->Next;
		}
	}
	cout << endl;
}

到了这里,关于图的拓扑排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构--拓扑排序

    A O V ⽹ color{red}AOV⽹ A O V ⽹ (Activity On Vertex NetWork,⽤顶点表示活动的⽹): ⽤ D A G 图 color{red}DAG图 D A G 图 (有向⽆环图)表示⼀个⼯程。顶点表示活动,有向边 V i , V j V_i, V_j V i ​ , V j ​ 表示活动Vi必须先于活动 V j V_j V j ​ 进⾏ 注:如果图中存在环路就不是 A O V 网 c

    2024年02月12日
    浏览(42)
  • 数据结构-拓扑排序

    一个无环的有向图称作有向无环图(Directed Acycline Graph),简称DAG图。 DAG图是描述含有公共子式的表达式的有效工具。 在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,称这种有向图为顶 点表示活动的网,简称AOV网。 AOV网中不能出现回路,而判

    2024年02月08日
    浏览(39)
  • 教学计划编制问题(数据结构 有向图 拓扑排序)

     本文对以下教学计划编制问题的解决作出实现,主要使用c语言(带一点cpp),开发环境为codeblocks 17.12,希望对各位读者有所帮助。(源码和数据文件可在主页获取,同时还有使用视频文件压缩包,数据文件需要和exe在同一目录下,结合某读者的意见同时放到github了 ) 地址如下

    2024年02月09日
    浏览(54)
  • python算法与数据结构(搜索算法和拓扑排序算法)---深度优先搜索

    了解树/图的 深度遍历,宽度遍历 基本原理; 会使用python语言编写 深度遍历,广度遍历 代码; 掌握 拓扑排序算法 搜索引擎 提到搜索两个子,大家都应该会想到搜索引擎,搜索引擎的基本工作步骤; 网页爬取 — 数据预处理 — 排序 — 查询 第一步,网页爬取,非常重要,

    2024年01月20日
    浏览(48)
  • 数据结构拓扑排序以及关键路径(出度邻接表)C语言 完整代码

    现实生活中一项工程通常会拆分成多个部分来进行,这些部分有些相互之间有发生的前提关系,还有些可以同时发生且不会互相打扰,但是合理且充分的利用时间来完成项目是一个问题。在项目完成的过程中,那些项目的完成时间被压缩可以压缩工程的总时间,以便于提高整

    2024年02月04日
    浏览(47)
  • 【数据结构——有向图】有环无环判定、拓扑排序(DFS、BFS)

    有向图(Directed Graph),也被称为有向图形或方向图,是一种图的类型。在有向图中,图中的边具有方向,从一个顶点指向另一个顶点。 在有向图中,每个顶点表示一个实体,而有向边则表示实体之间的关系或连接。这种有方向性的边表明了连接的起点和终点之间的单向关系

    2024年02月09日
    浏览(47)
  • 图的拓扑排序

            拓扑排序是一个 有向无环图(有向图、弧不形成闭环) 的所有顶点的线性序列。该线性序列中,图的每个顶点只出现一次,若顶点A到顶点B之间存在有向弧v1,v2,则顶点A一定在顶点B前面。             图的拓扑排序实现很简单,基本操作思想:         1、开

    2024年02月13日
    浏览(33)
  • 17.4:图的拓扑排序

    拓扑序一定是有向无环图。 拓扑排序不唯一 利用入度为零进行排序 思路:谁的入度为0,谁就是开始节点,将开始节点打印完之后,将开始节点的直接邻居的入度减1,然后重复。 利用点次进行排序。 点次越大的,排序位置越靠前。 而且我发现可以使用递归进行求点次。我

    2024年02月07日
    浏览(46)
  • 图的拓扑排序(AOV网络)

    概念 拓扑排序是对有向无环图的顶点的一种排序. AOV网络 : 在有向图中, 用顶点表示活动或者任务, 弧表示活动或者任务间的优先关系, 则此有向图称为用顶点表示活动的网络(Activity On Vertex简称AOV网络). 拓扑序列(Topolagical Order) : 在有向无环图中, 若存在顶点v i 到顶点v j 的路径

    2024年01月22日
    浏览(37)
  • 图论应用——拓扑排序

    拓扑排序的原理和宽度优先搜索差不多

    2024年04月26日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包