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语言的转义字符,转义字符的用法
|
12月前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
56 2
|
12月前
lanqiao OJ 230 调手表
lanqiao OJ 230 调手表
86 1
|
12月前
lanqiao OJ 261 九宫重排
lanqiao OJ 261 九宫重排
48 0
|
测试技术 Linux Apache
掌握JMeter参数化技巧:通过CSV文件实现高效登录压测
在本文中,我们将探讨如何使用 Apache JMeter 通过 CSV 数据文件进行登录性能测试参数化。首先创建一个包含用户名和密码的 `users.csv` 文件。接着在 JMeter 中,创建测试计划,添加线程组,配置 CSV 数据集,设置文件路径、编码及变量名。然后,创建 HTTP 请求并添加参数,使用 `${username}` 和 `${password}` 引用 CSV 中的数据。最后,添加监听器如查看结果树和聚合报告以分析测试结果。通过这种方法,能更有效地模拟真实用户行为,提高测试覆盖率,助力性能瓶颈的发现和优化。
|
12月前
lanqiaoOJ 2114 李白打酒加强版
lanqiaoOJ 2114 李白打酒加强版
53 1
|
12月前
acwing 1107 魔板
acwing 1107 魔板
50 0
|
12月前
acwing 1097 池塘计数
acwing 1097 池塘计数
81 0
|
12月前
acwing 1116 马走日
acwing 1116 马走日
46 0
|
12月前
|
人工智能
AcWing 274. 移动服务(线性dp)
AcWing 274. 移动服务(线性dp)
57 0