lanqiao OJ 108 发现环

简介: lanqiao OJ 108 发现环

1.发现环 - 蓝桥云课 (lanqiao.cn)

这是一个拓扑排序的题,用dfs找一下拓扑序列,因为找不到所以一定会有环,记录每一个点的前驱点,所求就是答案

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
 
using namespace std ;
const int N = 1e5 +10 ;
struct edge{//用于记录边
  int from , to ;
  edge(int a, int b){
    from = a , to = b ;
  }
};
int n ,cnt;//n是点的数量
bool v[N] ;//记录是否走过这个点
int path[N] ;//最后记录路径
int flag ;//记录一下是否找到环,找到环就退出dfs,要不然死循环
int fa[N] ;//记录每一个节点的前驱节点,便于后面路径的更新
vector<edge> e[N] ;//记录每一条边
 
void dfs(int u ,int pre){
  v[u] = 1 ;//凡是进来的点都标记一下,而且我们每一个点只会走一遍,如果走到第二遍就表示扎到了环
  for(int i = 0 ; i < e[u].size() ; i ++){
    int a = e[u][i].from , b = e[u][i].to ;//起点和终点
    if(b == pre){//因为是无向边所以我们不能再走上一个节点
      continue ;
    }
    fa[b] = a ;//记录一下当前这个点的父节点(前驱节点)
    if(v[b]){//如果找到走了第二次的点,就回溯记录路径
      int tmp = b ;
      flag = 1;//把旗帜标1 , 表示我们已经找到环了,马上退出dfs
      while(1){
        tmp = fa[tmp];
        path[cnt++] = tmp ;
        if(tmp == b) break ;
      } 
      return  ;
    } 
    else dfs(b,a) ;//没有找到环,继续深搜遍历每一个点
    if(flag == 1) return ;
  }
}
 
int main(){
  cin >> n ;
  for(int i = 0 ; i <n ; i ++){
    int a , b ; cin >> a >> b ;//无向图,所以要记录双向
    e[a].push_back(edge(a,b)) ;
    e[b].push_back(edge(b,a)) ;
  }
 
  dfs(1,0) ;
  sort(path,path + cnt) ;//从大到小排序 
  for(int i = 0 ; i < cnt ; i ++) {
    cout << path[i]<< " "  ;
  }
  cout << endl ; 
  return 0 ;
}
目录
相关文章
|
编译器 C语言
C语言的转义字符,转义字符的用法
C语言的转义字符,转义字符的用法
137 0
|
测试技术 Linux Apache
掌握JMeter参数化技巧:通过CSV文件实现高效登录压测
在本文中,我们将探讨如何使用 Apache JMeter 通过 CSV 数据文件进行登录性能测试参数化。首先创建一个包含用户名和密码的 `users.csv` 文件。接着在 JMeter 中,创建测试计划,添加线程组,配置 CSV 数据集,设置文件路径、编码及变量名。然后,创建 HTTP 请求并添加参数,使用 `${username}` 和 `${password}` 引用 CSV 中的数据。最后,添加监听器如查看结果树和聚合报告以分析测试结果。通过这种方法,能更有效地模拟真实用户行为,提高测试覆盖率,助力性能瓶颈的发现和优化。
|
JavaScript 前端开发 开发者
品牌案例-完成品牌列表的添加功能|学习笔记
快速学习品牌案例-完成品牌列表的添加功能
182 0
品牌案例-完成品牌列表的添加功能|学习笔记
|
机器学习/深度学习 人工智能 供应链
技术如何重塑全球经济
在技​​术创新方面,人们的情绪正在发生变化,这将对全球经济产生怎样的影响呢?
185 0
技术如何重塑全球经济
SpringCloud - 服务注册与发现(Eureka)(二)
SpringCloud - 服务注册与发现(Eureka)(二)
170 0
SpringCloud - 服务注册与发现(Eureka)(二)
|
Python
趁着课余时间学点Python(六)终止循环,阻断循环
趁着课余时间学点Python(六)终止循环,阻断循环
225 0
趁着课余时间学点Python(六)终止循环,阻断循环
|
芯片
9月26日科技联播:海底捞上市首日市值破千亿;双十一前三大快递公司领头涨价
海底捞今日上市,迅速“涮出”近千亿市值,港交所史上门槛最高新股到来,“双11”前最早传来的糟心消息:快递业“涨声”再起,中通韵达圆通率先调整;高通苹果再开战,高通:苹果窃取了我们的源代码交给英特尔,苹果:没证据别乱喷;一起来看今天的科技快讯!
1540 0
《人月神话》(P11)为舍弃而计划
实验性工厂和增大规模 化学工程师很早就意识到:在某个化学反应大规模投产之前必须进行实验性的生产。 软件系统的构建人员也面临同样的问题,但似乎从来没有吸取教训。
1281 0
|
关系型数据库 数据库 Ruby