Acwing 847.图重点的层次
链接:847. 图中点的层次 - AcWing题库

/*
题解:使用bfs求边为1的图的最短路径
注意 当bfs时 要想提前结束搜索 要注意第一个边走完走到结果 和 只有一个点的时候输出0时
*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e5+11,M=1e5+11;
const int Ma = 0x3f3f3f3f;
int e[M],idx,h[N],ne[M];
int dist[N];
int st[N];
int add(int a,int b){
ne[idx]=h[a];
e[idx]=b;
h[a]=idx++;
}
void bfs(int be,int en){
queue<int> que;
memset(st,0,sizeof st);
memset(dist,Ma,sizeof dist);
que.push(be);
st[be]=1;
dist[be]=0;
while(!que.empty()){
// cout<<11<<endl;
int t= que.front();
que.pop();
// cout<<e[h[t]]<<endl;
// cout<<dist[e[h[t]]]<<endl;
for(int i = h[t];i!=-1;i=ne[i]){
if(!st[e[i]]){
st[e[i]]=1;
que.push(e[i]);
dist[e[i]]=dist[t]+1;
}
}
}
if(dist[en]==Ma){
cout<<-1<<endl;
}else cout<<dist[en]<<endl;
}
int main()
{
int n,m;
cin>>n>>m;
memset(h,-1,sizeof h);//初始化不能忘记
for(int i =0;i<m;i++){
int a,b;
cin>>a>>b;
add(a,b);
}
// cout<<0x3f3f3f3f<<endl;
bfs(1,n);
return 0;
}