#include <bits/stdc++.h> using namespace std; const int MAX=5010; vector<int> a[MAX];//存储无向边 bool mark[5010];//标记边是否已被遍历 int bfs(int b,int d) { queue<pair<int,int>> q;//使用先进先出的队列进行bfs q.push({b,0});//pair储存当前位置和已走距离 mark[b]=true;//更新点状态 while(!q.empty()) { int x=q.front().first; int y=q.front().second; q.pop();//将点出队 if(x==d) return y; else for(int i=0;i<a[x].size();i++) if(!mark[a[x][i]]) { mark[a[x][i]]=true;//更新点状态 q.push({a[x][i],y+1});//将点入队 } } return -1;//未能到达终点 } int main() { int n,m; cin>>n>>m; for(int i=0;i<m;i++) { int u,v; cin>>u>>v; a[u].push_back(v); a[v].push_back(u); } for(int i=0;i<=n+1;i++) mark[i]=false;//标记点状态 int result=bfs(1,n); cout<<result; return 0; }