#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<cstdio>
#include<vector>
#include<ctime>
#include<unordered_map>
#include<map>
#include<cstdlib>
#include<iomanip>
#include<queue>
#include<set>
#include<stack>
#include<algorithm>
#include<fstream>
using namespace std;
vector<int> g[10010];
int in[10010];
int vis[10010];
int dis[10010];
queue<int> q;
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
g[v].push_back(u);
in[u]++;
}
int s,t;
cin>>s>>t;
for(int i=1;i<=n;i++)
{
if(in[i]==0&&i!=t)
{
for(int it:g[i])
{
if(vis[it])
continue;
vis[it]=1;
}
}
}
q.push(t);
while(q.size())
{
int u=q.front();
q.pop();
for(int it:g[u])
{
if(vis[it])
continue;
dis[it]=dis[u]+1;
q.push(it);
vis[it]=1;
}
}
if(dis[s]==0)
cout<<-1;
else
cout<<dis[s];
return 0;
}
图中点 7 的出边指向了 8 , 但 8 并不直接或间接与终点相连, 所以 7 并不能作为最短路径上一点, 然而这份代码并未考虑这一点并输出正确答案,却能AC, 我提供的数据一正确答案应该是3, 该代码输出为 2
数据二考虑起点不满足条件, 不可以作为答案路径上一点, 则答案为零, 该代码依旧没有考虑这点却AC了
一:
9 10
1 2
1 3
2 4
3 5
4 6
5 6
1 7
7 6
7 8
8 9
1 6
二:
4 6
4 2
4 4
1 1
1 4
1 1
1 3
1 3