```
#include <bits/stdc++.h>
using namespace std;
int ma[1500][1500];
int visit[1500];
int k,flag,king;
struct node
{
int data,depth;
}s,b[1500];
void BFS(int n)
{
int in,out;
in=0,out=0;
visit[n]=1;
b[in].data=n;
b[in].depth=0;
in++;
while(in>out)//类似树的层次遍历 也是模仿队列 目前不会直接用队列
{
s=b[out];
out++;
if(s.data==1)
{
king=s.depth;
break;
}
for(int i=1;i<=k;i++)
{
if(visit[i]==0&&ma[s.data][i]==1)
{
b[in].data=i;
b[in].depth=s.depth+1;
in++;
visit[i]=1;
}
}
}
}
int main()
{
int m,u,v;
while(~scanf("%d%d",&k,&m))
{
flag=0;
memset(visit,0,sizeof(visit));
memset(ma,0,sizeof(ma));
while(m--)
{
scanf("%d%d",&u,&v);
ma[u][v]=1;
}
BFS(k);
if(!visit[1])
{
printf("NO\n");
}
else
{
printf("%d\n",king);
}
}
return 0;
}
“`