2021.5.24
bfs单源最短路(无权):给定一个n,求1到1~n点的最短距离;
解题思路:bfs所到点一定为最短路 记录点和距离通过结构体或pair,将1放入队列,开始循环,将相邻点的添加进队列,步长+1,同时标记置1,用一个访问数组dis[10]来存结构体里每个点的步长,最后输出
#include <bits/stdc++.h>
using namespace std;
int n,m;
struct node
{
int g,step;
};
queue<node>a;
int bk[10],dis[10];
vector<int>e[20];
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
a.push({1,0});
bk[1]=1;
while(a.size())
{
node u=a.front();
dis[u.g]=u.step;
a.pop();
for(auto k:e[u.g])
{
if(bk[k])continue;
bk[k]=1;
a.push({k,u.step+1});
}
}
for(int i=1;i<=n;i++)
cout<<dis[i]<<" ";
return 0;
}