首页 > 其他分享 >拓扑排序

拓扑排序

时间:2024-07-29 11:39:36浏览次数:11  
标签:排序 int 拓扑 DAG 顶点 include

一,概念

1.DAG图:一个有向图中不存在环,则称为有向无环图,简称DAG图
2.拓扑排序:在DAG图中,所有活动可排列成一个线性序列,使得每个活动的所有前驱活动都排在该活动的前面,我们把此序列叫做拓扑序列,由DAG图构造拓扑序列的过程叫做拓扑排序

二,实现过程

First:从DAG图中选择一个没有前驱的顶点并输出
Next:从图中删除该顶点和以该顶点为起点的有向边。
Last:重复1、2,直到当前的DAG为空,或者当前图中不存在有前驱的顶点为止。如果最终图不为空,则必然存在环。

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;

int n,m;
vector<int> g[MAXN];
queue<int> q;
int in[MAXN];//每个顶点的入度

void Topsort(){
	for(int i=1;i<=n;i++){
		if(in[i]==0){
			q.push(i);
		}
	}//将入度为0的点加入队列
	while(!q.empty()){
		int t=q.front();
		cout<<t<<" ";//获得拓扑排序
		q.pop();
		for(int i=0;i<(int)g[t].size();i++){
			int idx=g[t][i];//遍历t的每个后继
			if(--in[idx]==0){//将删除边后入度为0的点加入队列
				q.push(idx);
			}
		}
	}
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		g[u].push_back(v);
		in[v]++;
	}
	return 0;
}

标签:排序,int,拓扑,DAG,顶点,include
From: https://www.cnblogs.com/Pagani/p/18329757

相关文章

  • LoRa MESH网络拓扑及其物联网应用场景简介
    什么是LORAMESH组网技术LORAMESH组网技术是一种基于LORA传输的Mesh组网方案,LoRaMESH网络允许设备之间以多跳(multi-hop)的方式进行无线通信。LoRaMESH组网技术被广泛运用于解决“最后一公里”问题,是实现设备之间低功耗、广覆盖通信的重要手段。LoRaMESH网络拓扑简介LoRaMES......
  • 【数据结构】排序算法
    目录排序冒泡排序选择排序直接插入排序希尔排序堆排序归并排序快速排序排序排序的概念:假设含有n个记录的序列为{R1,R2,R3,···,Rn},其相应的关键字分别为{K1,K2,K3,···Kn},需确定1,2,3,···,n的一种排列P1,P2,···,Pn,使其相应的关键字满足Kp1<=Kp2<=K......
  • js实现JSON数据根据某个字段排序
    1、js含有内置的sort()方法该方法是按字母顺序对数组进行排序的即按照字符编码进行排序,当数组中元素为数字类型时,排序结果与我们设想的完全不同,因为默认是按照字符编码的顺序进行排序的2、实现/**@description根据某个字段实现对json数组的排序*@para......
  • 408 数据结构排序算法
    第六章排序6.1冒泡排序voidswap(intarr[],inti,intj){ inttemp=arr[i]; arr[i]=arr[j]; arr[j]=temp;}//外层循环是说明n个元素排好序需要经过n-1轮 for(inti=n-1;i>0;i--){ boolflag=true; for(intj=0;j<i;j++){ if(arr[......
  • 算法-排序算法
    一、算法和算法分析什么是算法:​ 对特定问题的求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。算法的五个重要特性:有穷性确定性可行性输入输出算法设计的要求:正确性可读性健壮性高效率与低存储算法效率的度量:​ 算法的执行时间需要依......
  • Chapter 6: 排序
        在计算机科学中,排序算法是基础且核心的部分,它们被广泛应用于各种领域,如数据处理、信息检索等。C语言作为一种通用的、过程式的计算机程序设计语言,它的运行效率和灵活性使得它成为学习和实现这些排序算法的理想选择。本篇博客将深入探讨一些常见的排序算法,包括冒泡......
  • 如何利用PyQt实现列表添加删除排序功能?
    本文介绍如何实现列表增加删除和排序的功能,效果如下:1页面设计1.1列表#列表数据 self.list=['福宝','萌兰','金虎','蓝天']#创建四行一列标准数据模型self.mode=QStandardItemModel(4,1)#将数据中的列表项作为标准数据模型输出......
  • acwing归并排序。
    787.归并排序  题目  提交记录  讨论  题解  视频讲解给定你一个长度为 n......
  • 希尔排序的详解
    这里是目录:插入排序\texttt{\textcolor{#11D4B5}{\huge插入排序}}......
  • 2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素
    2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。要求找出最多可以选出的元素数量。输入:nums=[2,1,5,1,1]。输出:3。解释:我们将下标0和3处的元素增加1......