AcWing847.图中点的层次

题解
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
using namespace std;
const int N = 1e5 + 10;
int n, m;
queue<int> q;
int h[N], ne[2 * N], e[2 * N], idx, d[N];
void add(int a, int b)
{
ne[idx] = h[a], h[a] = idx, e[idx ++] = b;
}
void BFS()
{
q.push(1);
d[1] = 0;
while(q.size())
{
int a = q.front();
if(a == n) break;
q.pop();
for(int i = h[a]; ~i; i = ne[i])
if(d[e[i]] == -1)
q.push(e[i]), d[e[i]] = d[a] + 1;
}
}
int main()
{
memset(h, -1, sizeof h);
memset(d, -1, sizeof d);
int n, m, a, b;
scanf("%d%d",&n,&m);
for(int i = 0; i < m; ++i)
{
scanf("%d%d",&a, &b);
add(a, b);
}
BFS();
cout << d[n] << endl;
return 0;
}