标签:顺序 else family cout 台电脑 ack 链接 turn sizeof
#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); }
标签:顺序 else family cout 台电脑 ack 链接 turn sizeof
原文地址:https://www.cnblogs.com/mohari/p/12939664.html