Pagini recente » Cod sursa (job #2385851) | Cod sursa (job #2511742) | Cod sursa (job #622999) | Cod sursa (job #1928022) | Cod sursa (job #3300602)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
#define MAXX 1000001
int n,m,k,x,y;
queue<pair<int,int>> q;
vector<int> v[100001];
bool vizitat[100001];
int drumuri[100001];
void bfs(int m){
q.push({m,0});
vizitat[m]=1;
drumuri[m]=0;
while(!q.empty()){
int x=q.front().first;
int drum=q.front().second;
q.pop();
drumuri[x]=min(drumuri[x],drum);
for(auto u:v[x]){
if(!vizitat[u]){
vizitat[u]=1;
q.push({u,drum+1});
}
}
}
for(int i=1;i<=n;i++){
if(drumuri[i]!=MAXX){
fout<<drumuri[i];
}
else{
fout<<-1;
}
fout<<" ";
}
}
int main()
{
fin>>n>>m>>k;
for(int i=1;i<=m;i++){
fin>>x>>y;
v[x].push_back(y);
}
for(int i=1;i<=n;i++){
drumuri[i]=MAXX;
}
bfs(k);
return 0;
}