树与bfs.图中点的层次.acwing.847

code:
#include<bits/stdc++.h> using namespace std; const int N = 2e5+5; int h[N],ne[N],to[N],d[N],num,x,y,n,m; queue<int>q; void add(int u,int v) { ne[++num]=h[u]; to[num]=v; h[u]=num; } int bfs(int s) { for(int i=2;i<=n;++i)d[i]=-1; q.push(s);d[1]=0; while(!q.empty()) { int u=q.front();q.pop(); if(u==n)return d[n]; for(int i=h[u];i;i=ne[i]) { int v=to[i]; if(d[v]==-1) { d[v]=d[u]+1; q.push(v); } } }return -1; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;++i){scanf("%d%d",&x,&y);add(x,y);} cout<<bfs(1)<<endl; return 0; }
浙公网安备 33010602011771号