zoukankan      html  css  js  c++  java
  • 试题 历届试题 发现环(dfs)

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


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


      为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗?
    输入格式
      第一行包含一个整数N。
      以下N行每行两个整数a和b,表示a和b之间有一条数据链接相连。


      对于30%的数据,1 <= N <= 1000
      对于100%的数据, 1 <= N <= 100000, 1 <= a, b <= N


      输入保证合法。
    输出格式
      按从小到大的顺序输出在环路上的电脑的编号,中间由一个空格分隔。
    样例输入
    5
    1 2
    3 1
    2 4
    2 5
    5 3
    样例输出
    1 2 3 
    题目大意,找到环,便输出这个环,按从小到大排序。
    #include<bits/stdc++.h>
    using namespace std;
    vector<int>es[100005];
    vector<int>ans;
    int n,a,b; 
    int pre[100005];
    bool vis[100005];
    bool isend=false;
    void dfs(int k)
    {
    
        vis[k]=1;
        for(int i=0;i<es[k].size();i++){
            if(isend)return ;
            int v=es[k][i];
            if(!vis[v]){///没有访问过
                pre[v]=k;///将这个点的父亲设为k
                dfs(v);///继续深搜
            }
            else if(pre[k]!=v){///如果访问过、并且不是这个k点的父亲的话证明是环
                ans.push_back(v);
                while(v!=k){///将环各个点进数组
                    ans.push_back(k);
                    //cout<<k<<endl;
                    k=pre[k];
                }
                isend=true;///标记方便退出
                sort(ans.begin(),ans.end());///从小到大排下序
                for(int i=0;i<ans.size();i++){
                    cout<<ans[i]<<" ";
                } 
                return ;
            }
        }
        
    }
    int main()
    {
        cin>>n;
        memset(vis,0,sizeof(vis));
        memset(pre,0,sizeof(pre));
        for(int i=0;i<n;i++){
            cin>>a>>b;
            es[a].push_back(b);///无向图
            es[b].push_back(a);
        }
        dfs(1);
     } 

     

     
  • 相关阅读:
    判断设备类型是iPhone还是iPad
    robotium使用中的问题
    onTouchEvent()
    [ObjectC]@class的含义
    关于左外连接和内连接的区别
    web services = XML + HTTP
    c#中的变量
    C#捕捉异常
    ASP.NET中Visio图形的控制与数据的动态显示
    用存储过程在数据库中批量插入数据1w条
  • 原文地址:https://www.cnblogs.com/mohari/p/12939664.html
Copyright © 2011-2022 走看看