链接:传送门
求最短路径-1
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<math.h>
#define LL long long
using namespace std;
#include<queue>
#include<vector>
const int N=1e6+10;
//最短路径-1 只能用一层for循环
int book[N];
int dis[N];
int x,y,n,m;
int b[1100][1100];
vector<int>a[N];
void bfs()
{
queue<int>q;
q.push(1);
book[1]=1;
dis[1]=0;
while(!q.empty())
{
int k=q.front(); // 求出一个数
q.pop();
for(int i=0; i<a[k].size(); i++)
{
int j=a[k][i]; //与k相连的那个点
if(book[j])
continue;
book[j]=1;
dis[j]=dis[k]+1;
q.push(j); //再把与k相连的点放入队列
}
}
}
int main()
{
memset(dis,0,sizeof(dis));
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%d %d",&x,&y);
a[x].push_back(y); //表示x能到达y
a[y].push_back(x); // 表示y能到达x
}
bfs();
printf("%d",dis[n]-1);
return 0;
}
借鉴的同学的代码,不明白为啥单单写一个 dis[j]=dis[k]+1;就可以找到最短路??????