#include <bits/stdc++.h>
using namespace std;
vector<int> mp[1005];
int n, m, ans = INT_MAX;
int bfs(int sx);
int main()
{
// 输入构建邻接表
cin >> n >> m;
for (int i =1;i <= m;i++){
int x, y;
cin >>x >> y;
mp[x].push_back(y);
mp[y].push_back(x);
}
for (int i = 1; i <= n; i++) // 以内一个节点作为开头进行搜索,找最小环
{
int tm = bfs(i);
if(tm != -1)ans = min(ans, tm);
}
if (ans < INT_MAX)cout <<ans;
else cout << -1;
return 0;
}
int bfs(int sx)
{
queue<int> que;
int vis[1001];
memset(vis, -1, sizeof(vis)); // 标记
que.push(sx); // 起点
vis[sx] = 0;
while (que.size())
{
int hd = que.front();
que.pop();
for (int i = 0;i < mp[hd].size();i++) // 遍历队头的所有邻居
{
int nid = mp[hd][i];
if (vis[nid] == -1)
{
vis[nid] = vis[hd] + 1; // 标记并入队搜索
que.push(nid);
}
else if (vis[nid] < vis[hd]) // 走过
{
// 计算环的大小
return vis[nid]; // int, return vis[];
}
}
}
return -1;
}
老师说是在计算环的大小的else if和return那里有错
但我不知道怎么写