广度优先搜索
每往下搜索一层,步数加一。如果最后没搜索到,return -1;
#include<bits/stdc++.h>
using namespace std;
int sol(vector<vector<int>>mp,int len){
queue<int> Q;
unordered_map<int, int> visited;//记录访问过的点
int res=0;
Q.push(0);
while(!Q.empty()){
res++;
int size=Q.size();
for(int i=0;i<size;i++){
int id=Q.front();
Q.pop();
for(int j=0;j<mp[id].size();j++){
if(mp[id][j]==len-1){
return res;
}
if(visited.find(mp[id][j])==visited.end()){
Q.push(mp[id][j]);
visited[mp[id][j]]++;
}
}
}
}
return -1;
}
int main(){
int n,m;
cin>>n>>m;
vector<vector<int>>mp(2*n,vector<int>(0,0));//邻接矩阵,预留了较大的空间
int x1,x2;
for(int i=0;i<m;i++){
cin>>x1>>x2;
mp[x1-1].push_back(x2-1);
mp[x2-1].push_back(x1-1);
}
cout<<sol(mp,n)<<endl;
return 0;
}

京公网安备 11010502036488号