注意题目是有向图。
#include<bits/stdc++.h>
// #define int long long
#define double long double
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef long long ll;
typedef pair<int,int> PII;
const int N=2e6+10;
const int M=1e3+10;
int mod=1e9+7;
int dist[N];
vector<int> adj[N];
int vis[N];
void bfs(int sx){
queue<PII> q;
q.push({sx,0});
dist[sx]=0;
while(!q.empty()){
int u=q.front().first;
int d=q.front().second;
q.pop();
if(vis[u]) continue;
vis[u]=1;
dist[u]=d;
for(int v:adj[u]){
if(!vis[v]){
q.push({v,d+1});
}
}
}
}
void solve(){
int n,m,st;
cin>>n>>m>>st;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
}
bfs(st);
for(int i=1;i<=n;i++){
if(!vis[i]) cout<<-1<<" ";
else cout<<dist[i]<<" ";
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int _;
_=1;
//cin>>_;
while(_--){
solve();
}
}

京公网安备 11010502036488号