这道题是没有过测试的,问题是在于测试的数据太大了,但是对于小数据来说,我的思路是没问题的
//这道题就不是求最短路径的,其实就是求,从起点到终点的边的个数,而不是最短路径(因为没有权值)
//那按照bfs的写法,是需要有一个队列,先把起点放到队列中,然后层次加一,然后再把他相关的边也都放到队列中,层次再加一
#include<string.h>
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
using namespace std;
int n,m,a,b;
int map[100][100];
int bfs(int s){
int step=0;
bool flag;//用来判断此次操作是否进行了放置
//创建一个队列
queue<int> p;
//把起点放进去
p.push(s);
while(!p.empty()){
flag=false;
//再队列非空的情况之下
int temp=p.front();
if(temp==b){//也就是终点的话
return step;
break;
}
//再删去队首
p.pop();
//再开始判断从这个队首出去的边有没有
for(int i=0;i<m;i++){
if(map[temp][i]==1){
p.push(i);//就进队列
flag=true;//并且进行过次操作
}
}
if(flag)
step++;//多一层
}
return -1;
}
int main(){
scanf("%d%d",&n,&m);
//在开始输入对应的边
for(int i=0;i<m;i++){
scanf("%d%d",&a,&b);
map[a][b]=1;//把这个起点和终点设置
}
//再输入起点和终点
scanf("%d%d",&a,&b);
printf("%d",bfs(a));
}