拓扑排序(C++)

news/2024/12/2 14:01:37/

  拓扑排序是指对有向无环图中的所有结点进行排序的一种算法。拓扑排序依赖于图的拓扑结构,即顶点之间的依赖关系。拓扑排序的过程类似于排课,每个课程都有其先修课程,只有当其先修课程修完了,该课程才能开始学习。

拓扑排序通过遍历节点的入度(入边的数量)来判断结点之间的依赖关系,从而对所有结点进行排序。具体过程如下:

  1. 找到所有入度为0的结点,将其入队。

  2. 取出队首结点,将其加入结果列表。

  3. 将该结点指向的所有结点的入度减1。

  4. 遍历所有入度为0的结点,将其加入队列中。

  5. 重复步骤2-4,直到队列为空。

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int n, d[10000] = { 0 }, ans[10000],k;//节点,节点入度数,储存图,储存答案
vector<int> g[100];
void topusort()
{queue<int> q;//入度为0的队列for (int i = 1; i <= n; i++)//将入度为0的点进入队列{if (d[i] == 0)q.push(i);}while (!q.empty())//队列不为空{int f = q.front();//取队头ans[k++] = f;q.pop();for (int i = 0; i < g[f].size(); i++){int t = g[f][i];d[t]--;//与f有连接的点,入度减一if (d[t] == 0)//度为0的点进入队列q.push(t);}}}
int main()
{cin >> n;//节点数for (int i = 1; i <= n; i++){int x, y;cin >> x >> y;d[y]++;//y点入度加一g[x].push_back(y);//用vector存图}topusort();if (k != n)cout << "图中有环,无法进行" << endl;else{cout << "拓扑排序后序列:" << endl;for (int i = 0; i < k; i++)cout << ans[i];}
}

 


http://www.ppmy.cn/news/1149933.html

相关文章

c++视觉处理---霍夫变换

霍夫直线变换的函数 HoughLines 是OpenCV库中用于执行霍夫直线变换的函数。霍夫直线变换用于检测图像中的直线。下面是该函数的基本用法&#xff1a; cv::HoughLines(image, lines, rho, theta, threshold);image: 输入的二值图像&#xff0c;通常是通过边缘检测算法生成的。…

【C语言数据结构】图-邻接矩阵法

图-邻接矩阵法 代码实现 代码实现 #include<stdio.h> #include<stdlib.h> #include<stdbool.h>//定义最大顶点数为100&#xff0c;也就是这个图里最多有100个顶点 #define MaxVertexNum 100//给顶点类型设置为char(其实本质是给char取了个别名叫VertexType)…

OCP Java17 SE Developers 复习题04

答案 F. Line 5 does not compile. This question is checking to see whether you are paying attention to the types. numFish is an int, and 1 is an int. Therefore, we use numeric addition and get 5. The problem is that we cant store an int in a String variab…

【数学】Monocarp and the Set—CF1886D

Monocarp and the Set—CF1886D 参考文章 思路 我们把添加数字的过程倒过来看&#xff0c;也就是对长度为 n n n 的数组一个一个删除数字。那么 ′ > ′ > ′>′、 ′ < ′ < ′<′、 ′ ? ′ ? ′?′ 就分别代表“删除最大的数字”、“删除最小的数字…

Leetcode.2867 统计树中的合法路径数目

题目链接 Leetcode.2867 统计树中的合法路径数目 rating : 2428 题目描述 给你一棵 n n n 个节点的无向树&#xff0c;节点编号为 1 1 1 到 n n n 。给你一个整数 n n n 和一个长度为 n − 1 n - 1 n−1 的二维整数数组 e d g e s edges edges &#xff0c;其中 e d g …

同创永益成为英迈首家签约生态伙伴

日前&#xff0c;同创永益已和英迈签署生态运营战略协议&#xff0c;并正式成为英迈全新打造的GTM生态圈的首位签约合作伙伴。双方将携手对“同创数字韧性平台”产品进行一站式联合解决方案的持续整合&#xff0c;并将大力推动该联合解决方案在市场上的进一步拓展。 云原生时代…

在服务器上解压.7z文件

1. 更新apt sudo apt-get update2. 安装p7zip sudo apt-get install p7zip-full3. 解压.7z文件 7za x WN18RR.7z

免费使用Salesforce Data Cloud!详细操作步骤来啦

Data Cloud是Salesforce向市场推出的增长最快的产品&#xff0c;这对Salesforce来说是一个重要竞争优势。 近期&#xff0c;Salesforce宣布客户可以免费使用Data Cloud。这就是所谓的零美元SKU&#xff0c;换句话说&#xff0c;这是一条不会产生任何成本的Salesforce产品线。 …