广度优先搜索

每往下搜索一层,步数加一。如果最后没搜索到,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;
}