给定一个无向图,求出其最小环,若没有环,输出 -1。
7 7
1 2
2 3
3 1
4 5
5 6
6 7
7 4
3
3 2
1 2
2 3
-1
my code:
#include <bits/stdc++.h>
using namespace std;
int n,m,dis[3000],ans = 2147483647,x,y;
vector <int> v[2000];
void dfs(int now,int fat,int st){
dis[now] = st;
for(auto i : v[now]){
if(i != fat && st > dis[i]){
if(dis[i] > -1){
ans = min(ans,st - dis[i] + 1);
}else{
dfs(i,now,st + 1);
}
}
}
}
int main(){
cin >> n >> m;
memset(dis,-1,sizeof dis);
for(int i = 1; i <= m; i++){
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i = 1; i <= n; i++){
if(dis[i] == -1){
dfs(i,-1,0);
}
}
if(ans == 2147483647){
cout << -1;
}else{
cout << ans;
}
return 0;
}