#include<bits/stdc++.h>
using namespace std;
const int N=1010;
vector<int> g[N];
bool vis[N],flag;
int dis[N];
queue<int> q;
int n,m,a,b;
void init()
{
flag=false;
for(int i=1;i<=n;i++)
{
dis[i]=0;
g[i].clear();
vis[i]=false;
}
}
void build()
{
for(int i=0;i<m;i++)
{
cin>>a>>b;
g[a].push_back(b);
}
}
void bfs(int n)
{
q.push(n);
vis[n]=true;
while(q.size())
{
for(auto tt:g[q.front()])
{
if(!vis[tt])
{
if(tt==1)
{
flag=true;
}
q.push(tt);
vis[tt]=true;
dis[tt]=dis[q.front()]+1;
}
}
q.pop();
}
}
int main()
{
while(cin>>n>>m)
{
init();
build();
bfs(n);
if(flag)
cout<<dis[1]<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
在写这道题的时候同样超了内存, 问题是在bfs遍历每个点的时候忘记更新每个点的状态,也就是vis[tt]=true;