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