题解:B4292 [蓝桥杯青少年组省赛 2022] 路线
由于道路是双向的,所以求每个点到点
考虑使用广度优先搜索,从节点
代码
#include<bits/stdc++.h>
using namespace std;
vector<int> a[110];
int ans[110];
bool b[110];
queue<int> q;
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for(int i=1;i<=n;i++){
ans[i]=-1;
}
ans[n]=0;
q.push(n);
b[n]=1;
while(q.size()){
int x;
x=q.front();
q.pop();
for(int i=0;i<a[x].size();i++){
if(b[a[x][i]]==0){
q.push(a[x][i]);
b[a[x][i]]=1;
ans[a[x][i]]=ans[x]+1;
}
}
}
for(int i=1;i<n;i++){
cout<<ans[i]<<" ";
}
}