【蓝桥杯】拓扑排序

一.拓扑排序

1.定义:

设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列$v_1,v_2,...,v_n$称为一个拓扑序列,当且仅当满足下列条件:若从顶点$v_i$$v_j$有一条路径,则在顶点序列中顶点$v_i$必在$v_j$之前。

2.基本思想: 

(1)从AOV网中选择一个没有前驱的顶点并且输出;

(2)从AOV网中删除该顶点,并且删去所有以该顶点为头的的弧;

(3)重复上述两步,直到全部顶点都被输出,或AOV网中不存在没有前驱的顶点。

二.实战演练

1.问题描述:

小明的实验室有 N 台电脑,编号1⋯N。原本这 N 台电脑之间有 N−1 条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。

不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了 BUG。

为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗?

2.输入描述:

输入范围:

第一行包含一个整数 N 。

以下 N 行每行两个整数 a,b,表示 a 和 b 之间有一条数据链接相连。

其中, 1≤N≤10^5,1≤a,b≤N。

输入保证合法。

3.输出描述:

按从小到大的顺序输出在环路上的电脑的编号,中间由一个空格分隔。

dfs+拓扑排序实现:

//发现环
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>using namespace std;const long long N=1e5+10;
vector <int> v[N];
vector <int> result;
int d[N]={0};
bool vis[N]={false};void dfs(int x){vis[x]=true;for(int i=0;i<v[x].size();i++){d[v[x][i]]--;if(d[v[x][i]]==1){dfs(v[x][i]);}}
}
void solve(int n){for(int i=1;i<=n;i++){if(d[i]==1){dfs(i);}}for(int i=1;i<=n;i++){if(vis[i]==false){result.push_back(i);}}sort(result.begin(),result.end());for(int i=0;i<result.size();i++){cout<<result[i]<<' ';}
}
int main(int argc, const char * argv[]) {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,a,b;cin>>n;for(int i=0;i<n;i++){cin>>a>>b;d[a]++;d[b]++;v[a].push_back(b);v[b].push_back(a);}solve(n);return 0;
}

vector中的begin与end

begin返回向量头指针,指向第一个元素。

end返回向量尾指针,指向向量最后一个元素的下一个位置。

bfs+拓扑排序实现:

//发现环
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>using namespace std;const long long N=1e5+10;
vector <int> v[N];
vector <int> result;
int d[N]={0};
bool vis[N]={false};
queue <int> q;void bfs(int n){int u;for(int i=1;i<=n;i++){if(d[i]==1){q.push(i);//入队vis[i]=true;//标记为已经搜索过}}while(!q.empty()){u=q.front();//取出队头q.pop();for(int i=0;i<v[u].size();i++){//搜索邻接点d[v[u][i]]--;if(d[v[u][i]]==1){q.push(v[u][i]);vis[v[u][i]]=true;}}}for(int i=1;i<=n;i++){if(vis[i]==false){result.push_back(i);}}sort(result.begin(),result.end());for(int i=0;i<result.size();i++){cout<<result[i]<<' ';}
}int main(int argc, const char * argv[]) {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,a,b;cin>>n;for(int i=0;i<n;i++){cin>>a>>b;d[a]++;d[b]++;v[a].push_back(b);v[b].push_back(a);}bfs(n);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492113.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海南云仓酒庄拜会三亚市贸促会与三亚国际商会共谋发展 共绘蓝图

2024年2月23日上午&#xff0c;三亚市贸促会党组书记、会长、三亚国际商会会长方玉来在三亚国际商会会议室与海南云仓酒庄有限公司党支部书记蒋义一行进行了深入座谈交流&#xff0c;本次还有副会长张成山、秘书处副秘书长孙秋丽、李婧参加了座谈会。此次座谈会旨在加强双方的合…

JAVA毕业设计129—基于Java+Springboot+thymeleaf的物业管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootthymeleaf的物业管理系统(源代码数据库)129 一、系统介绍 本项目前后端分离&#xff0c;本系统分为管理员、小区管理员、用户三种角色 1、用户&#xff1a; 登…

yolov8车辆识别模型(附数据集)

目录 前言 一、我的数据集 二、其他车辆数据集 三、我的模型 四、模型训练&#xff08;一站式链接&#xff09; 五、我的训练过程 前言 因为为了做毕设&#xff0c;所以训练了一个道路监控的车辆模型。 效果不是很好&#xff0c;希望大佬们指导一下。 再此也分享我找了到的…

《Docker 简易速速上手小册》第6章 Docker 网络与安全(2024 最新版)

文章目录 6.1 Docker 网络概念6.1.1 重点基础知识6.1.2 重点案例&#xff1a;基于 Flask 的微服务6.1.3 拓展案例 1&#xff1a;容器间的直接通信6.1.4 拓展案例 2&#xff1a;跨主机容器通信 6.2 配置与管理网络6.2.1 重点基础知识6.2.2 重点案例&#xff1a;配置 Flask 应用的…

Python高性能web框架--Fastapi快速入门

文章目录 fastapi框架一、预备知识点1.1、http协议一、简介二、 http协议特性三、http请求协议与响应协议 1.2、api接口 二、quick start简单案例 fastapi框架 Fastapi&#xff0c;一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的web框架。 fastapi的两个核心…

three中界面交互gui.js库的使用

gui.js库(可视化改变三维场景) dat.gui.js说白了就是一个前端js库&#xff0c;对HTML、CSS和JavaScript进行了封装&#xff0c;学习开发的时候&#xff0c;借助dat.gui.js可以快速创建控制三维场景的UI交互界面&#xff0c;你打开课件中案例源码体验一下就能感受到。 学习dat…

Flask基础学习4

19-【实战】问答平台项目结构搭建_剪_哔哩哔哩_bilibili 参考如上大佬的视频教程&#xff0c;本博客仅当学习笔记&#xff0c;侵权请联系删除 问答发布的web前端页面实现 register.html {% extends base.html %}{% block head %}<link rel"stylesheet" href&q…

【Antv-G6成长之路一】初识antv G6之什么是G6,G6能做哪些事情?(附实例图文)

G6详解目录 写在前面涉及知识&#xff1a;效果图1、G6是什么&#xff1f;1.1、g6的概念1.2、g6的应用 2、G6基础示例demo2.1、引入组件包&#xff08;js&#xff09;2.2、创建画布div2.3、创建G6节点2.4 常用节点属性说明2.5、设置数据节点和连线2.6、代码最终实现 3、G6官网4、…

嵌入式学习day25 Linux

进程基本概念: 1.进程: 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息&#xff08;根据CPU占用率排序&a…

【笔记】【电子科大 离散数学】 2.命题

文章目录 数理逻辑定义 命题定义不是命题的例子 原子命题和复合命题定义约定 命题联结词否定联结词定义例子真值表 合取联结词定义例子真值表 析取联结词定义例子 蕴含联结词定义例子真值表 等价联结词定义例子真值表 命题符号化及其应用速查表格优先级复合命题符号化布尔检索演…

数据安全之路:深入了解MySQL的行锁与表锁机制

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据安全之路&#xff1a;深入了解MySQL的行锁与表锁机制 前言基础innodb中锁与索引的关系如何避免表锁 前言 在当今数据密集的应用中&#xff0c;数据库锁成为了确保数据一致性和并发操作的关键工具…

芯品荟 | 电动牙刷应用介绍

PART ONE 市场简介 - Market Profile - 电动牙刷个护是小家电最炙手可热的细分赛道之一。 随着居民的消费水平不断提升&#xff0c;口腔保健意识也逐步增强&#xff0c;中国电动牙刷市场迎来高速发展阶段。目前电动牙刷全球年用量在1亿只左右。 PART TWO 产品应用框图 - Bl…