首页 > 编程语言 >算法之拓扑排序:把图切成片!

算法之拓扑排序:把图切成片!

时间:2023-01-18 13:56:20浏览次数:32  
标签:int 拓扑 入度 工作 算法 排序 图切

前置芝士

BFS,别告诉我连这个都不会。

算法介绍

定义

数学上的:

将DAG中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。
通俗一点:
用宽搜一层层把图切开。
前提:图是一个DAG(有向无环图)

解决什么问题

假设有一些工作,完成某个工作的前提需要完成另某个工作,称为准备工作,至少一个工作不需要任何准备工作,至少一个工作不是任何工作的准备工作。
表示这种关系的图称为AOV网。用topo排序解决此类问题。

算法思路

文字思路

  1. 将入度为0的点扔进队
  2. 遍历这些点,将每个点所连的边炸掉,相当于所通向的点入度-1
  3. 如果发现有点入度变为0则扔进队
  4. 队列为空,算法结束,每次从队中取出元素的顺序就是一个合法的拓扑序

伪代码展示

int n;
vector<int>gragh[maxn];
int in[maxn];
for(int i=1;i<=n;i++){
    if(!in[i])q.push(i);
}
while(!q.empty()){
    int now=q.front();q.pop();
    printf("%d\n",now);
    for(int i=0;i<gragh[now].size();i++){
        in[gragh[now][i]]--;
        if(!in[gragh[now][i]]){    
       	    q.push(gragh[now][i]);
	}
    }
}

标签:int,拓扑,入度,工作,算法,排序,图切
From: https://www.cnblogs.com/mornhus-xsylf-123/p/17041394.html

相关文章

  • 扑克排序
    AA223344,一共4对扑克牌。请你把它们排成一行。要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。请填写出所有符合要求的排列中,字典序最......
  • 算法:冒泡排序
    冒泡排序:每次遍历将最大的数放到最后。inta[]={78,15,1,2,8,45,21,63,68,23};如果我们有a这样10个元素的数组,用冒泡排序就是进行10次循环。第一循环将78放到最后,第......
  • 【拓扑排序】LeetCode 210. 课程表 II
    题目链接210.课程表II思路在BFS过程中将所有入度为0的点放入结果集中,如果最终结果集中点的数目和课程数一样,则说明这个结果集可行。代码classSolution{pub......
  • JS数组对象 | 中文按照首字母排序sort()、localeCompare()
    一、数组//根据中文の首字母排序letarr=['上海','北京','广州','深圳']arr.sort((a,b)=>a.localeCompare(b))console.log(arr)//数组sort()方法是会改变原......
  • 【拓扑排序】LeetCode 207. 课程表
    题目链接207.课程表思路参考Krahets大佬的思路代码classSolution{publicbooleancanFinish(intnumCourses,int[][]prerequisites){int[]inde......
  • D&C--快速排序
    分而治之->递归式问题解决方法工作原理:1,找出简单的基线条件2,确定如何缩小问题规模,使其符合基线条件。快速排序算法:1,取一个基准值,大于基准值的位于一个数组,小于基准值......
  • MySQL自定义排序ORDER BY FIELD
    在一些场景中,有场景A查询出一个已经排好顺序的id,需要到场景B中查询这些,使用mysql中的WHERE**IN(****),查询出来的结果并不是按照传入的list排序的.但是......
  • python 排序
    对所有可迭代的对象进行排序操作sort与sorted区别:sort是应用在list上的方法sorted可以对所以可迭代的对象进行排序操作list的sort方法返回的是对已经存在的列表进行......
  • AtCoder Beginner Contest 285 D - Change Usernames(拓扑排序)
    这题想到可以用map容器将string与一个端点下标对应,再建一个有向图,将问题转换成判断一个有向图是否有环赛后补题网上搜如何判断图是否有环,学到了拓扑排序拓扑排序是什么......
  • IOS中Object-C按照NSDictionary中的某个Key排序的方法
    //create_time降序NSComparisonResultsort_desc(NSDictionary*firstDict,NSDictionary*secondDict,void*context){NSDateFormatter*dateFormatter=[[NSD......