首页 > 其他分享 >考前复习——拓扑排序

考前复习——拓扑排序

时间:2023-06-14 10:55:05浏览次数:34  
标签:cnt 复习 考前 int 拓扑 ++ 排序 out

拓扑排序要解决的问题是给一个图的所有节点排序

在一个 DAG(有向无环图) 中,我们将图中的顶点以线性方式进行排序,使得对于任何的顶点 u 到 v 的有向边 (u,v), 都可以有 u 在 v 的前面。

注:有环的图无法给出拓扑排序 因此也可以用这个性质判断图有无环



int n,m;
int in[N],out[N];//记录入度与出度
int num;
int ans[N];

queue<int> q;

struct node{
	int to,w,next;
}e[N];
int head[N];
int cnt;

void add(int u,int v,int w)
{
	e[++cnt].to=v;
	e[cnt].w=w;
	e[cnt].next=head[u];
	head[u]=cnt;
}

int main()
{
	cin>>n>>m;//点 边
	for(int i=1;i<=n;i++)head[i]=-1;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		//由u至v
		//因此  u出度++  v入度++ 
		in[v]++;
		out[u]++;
		add(u,out[u],v);
	}
	for(int i=1;i<=n;i++)
	{
		if(in[i]==0)
		{
			//没有先决条件了 可以办掉它 
			q.push(i);
			num++;
			ans[num]=i;
		}
	}
	while(!q.empty())
	{
		int k=q.front();
		q.pop();
		for(int i=head[k];i!=-1;i=e[i].next)
		{
			int t=e[i].w;
			in[t]--;
			if(in[t]==0)
			{
				q.push(t);
				num++;
				ans[num]=t;
			}
		}
	}
	/*
	num用于对特定位置的标识
	此处判断是因为--如果可以拓扑排序,那num==n 
	*/
	if(num==n)
	{
		for(int i=1;i<=num;i++)
			cout<<ans[i]<<" ";//拓扑排序输出 
	}
	else
	{
		cout<<"Error!";
	}
	return 0;
}

标签:cnt,复习,考前,int,拓扑,++,排序,out
From: https://www.cnblogs.com/pigAlg/p/17479583.html

相关文章

  • 2310考期最新【密训-考前3小时】中国古代文学作品选(二)
    为什么说《待漏院记》一文有很强的逻辑性?[1804简答](1)文章先由“勤”立说,引出待漏院,由待漏院转出“思”字,又由“思”字切入,描写贤、奸两类宰相的不同表现,最后以“慎”字作结,结,点明文章主旨。全文环环相扣,步步深入,具有很强的逻辑性。2.《雨霖铃》(寒蝉凄切)的艺术特色[1910简答......
  • 数学分析复习:Weierstrass 逼近定理, Müntz–Szász 定理
    本学期的“数学分析(不是实验班)”讲了一堆Approximationtheory,这是怎么绘事呢?定理1(Weierstrass).连续函数\(f\in\mathrmC[0,1]\)可被多项式一致逼近.对任意\(\varepsilon>0\)和\(x\in[0,1]\),设随机变量\(X\)服从二项分布\(\mathrmB(n,x)\),由Chebysh......
  • 数据库复习——数据库模式设计
    数据库模式设计如果不好会导致的问题:1.冗余2.导致数据一致性出现问题3.插入异常4.更新异常5.删除异常函数依赖函数依赖是指一个或多个属性的取值可以确定另一个属性的取值。具体地说,如果一个关系模式R中属性集合X的取值能唯一地确定属性集合Y的取值,那么我们......
  • 拓扑排序
    定义拓扑排序(Topologicalsorting)要解决的问题是给一个有向图的所有节点排序。这里直接使用OI-Wiki中举的例子来说明:我们可以拿大学选课的例子来描述这个过程,比如学习大学课程中有:单变量微积分,线性代数,离散数学概述,概率论与统计学概述,语言基础,算法导论,机器学习。当我们想要学习......
  • Linux内核期末复习
    1、P22-252、P36、P165ret指令的作用:进程切换时用什么函数 _switch_to_函数如何理解怎么实现  3、gcc、gdb命令 gdb 堆栈汇编典型示例: 反汇编指令:  4、内嵌汇编(10号系统调用)#include<stdio.h>intmain(){longresult;longsys......
  • 计网复习(整理自用)
    复习计算机领域单位K=2的10次方M=2的20次方G=2的30次方T=2的40次方第一章概述1.基本概念(1)协议定义、三要素协议定义:为进行网络中的数据交换而建立的规则、标准或约定称为网络协议。三要素:语法,语意,时序(2) 网络体系结构OSI:物理层,数据链路层;网络层;传输层;会话层,表......
  • java复习
    基本语法一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。类:类是一个模板,它描述一类对象的行为和状态。class对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。new方法:方法......
  • 6.11 中考前一天打的比赛
    http://oi.nks.edu.cn/zh/Contest/RankListOI/2364当时在坐校车,所以这场晚做了半个小时,但考的也看得过去T1:签到题http://oi.nks.edu.cn/zh/Problem/Details?cid=2364&tid=A一道构造题,比较简单,但我不太擅长构造,所以这道写了大概一个小时。思路也比较清楚,就先放限制了的数字,不能......
  • 算法分析期末复习
    算法分析期末复习第一章算法概述基本理论知识课后作业做过的类型渐进阶排序,类似课后作业:1-3输入规模,类似课后作业:1-4,1-5第二章递归与分治基本概念,基本思想递归:直接或间接的调用自身的算法。分治:分治法的子问题间是相互独立的,子问题不包含公共的子问题。......
  • Vue考试复习
    App.vue<scriptsetup>importHelloWorldfrom'./components/HelloWorld.vue'importLoginfrom'./components/Login.vue'//importCalcfrom'./components/Calc.vue'//importShoppingCartfrom'./components/ShoppingC......