对于基环树如何寻找并且标记其中的环

#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<cmath>
#include<set>
using namespace std;
typedef long long ll;
const int N=1e5;
const int maxn=1e7+10;
int n,m;
int head[N],ver[N],nxt[N],fa[N];
int dfns[N],loop[N];
int tot,cnt,num;
void get_loop(int u){
    dfns[u]=++cnt;  //找出每个结点的遍历顺序
    for(int i=head[u];i;i=nxt[i]){
        int v=ver[i];
        if(v==fa[u])  continue;  //排除父结点
        if(dfns[v]){    //观察这个点之前是否遍历过
            if(dfns[v]<dfns[u]) continue;  //子节点在更前面先遍历
            //某个结点的子节点
            loop[++num]=v;
            for(;v!=u;v=fa[v]){
                loop[++num]=fa[v];
            }
        }else{
            fa[v]=u,get_loop(v);
        }
    }
}
void add(int x,int y){
    ver[++tot]=y;
    nxt[tot]=head[x];
    head[x]=tot;
}
int main(){
    cin>>n>>m;
    while(m--){
        int x,y;
        cin>>x>>y;
        add(x,y);
        add(y,x);
    }
    get_loop(1);
    for(int i=1;i<=num;i++){
        cout<<loop[i]<<" ";
    }
    return 0;
}
全部评论

相关推荐

05-30 13:04
已编辑
门头沟学院 算法工程师
智谱和米哈游都是ai大模型agent的业务钱的话还是米更多,几乎翻倍了,有没有老哥是两个公司其中一个的,能问问转正率咋样嘛,我问的hr回答都是做的好就可以转正暑期实习
码农索隆:选米哈游:短期高薪、敢承担风险、具备强创新能力,且愿押注游戏AI赛道。 选智谱:稳定性与行业通用能力积累,接受薪资差距以换取更稳妥的职业基础。
投递北京智谱华章科技等公司6个岗位 > 实习期间如何提升留用概率?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务