赞
踩
对于有向图而言 可以使用拓扑排序的方式找出图中的环
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn = 1e5+7;
- int n;
- int du[maxn];//入度
- vector<int> gra[10];
- vector<int> res;
- void addedge(int a,int b){
- du[b]++;
- gra[a].push_back(b);
- }
- void topo(){
- queue<int> q;
- for(int i = 1; i <= n; i++){
- if(du[i] == 0){
- q.push(i);
- }
- }
- while(!q.empty()){
- int temp = q.front();
- q.pop();
- for(int i = 0; i < gra[temp].size(); i++){
- int to = gra[temp][i];
- du[to]--;
- if(!du[to]){
- q.push(i);
- }
- }
- }
- }
- int main(){
- cin>>n;
- for(int i = 0; i < n; i++){
- int a,b;
- cin>>a>>b;
- addedge(a,b);
- }
- topo();
- for(int i = 1; i <= n; i++){
- if(du[i]){
- cout<<i<<' ';
- }
- }
- }
对于无向图 可以采用并查集的方式,在读边的时候,如果两个顶点在同一个集合中,说明构成了环,这时令这两个顶点作为起点和终点,深搜一下输出路径即可
蓝桥杯2017国赛c++b组 t4 找环
题意:
编号为1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。