Pagini recente » Cod sursa (job #2332030) | Cod sursa (job #709514) | Cod sursa (job #1026532) | Cod sursa (job #142899) | Cod sursa (job #2096754)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
FILE *fin, *fout;
int n,m,s;
vector<int>graph[100001];
int d[100001],viz[100001];
void citire(){
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
fscanf(fin,"%d %d %d\n",&n,&m,&s);
int a,b;
for(int i=0;i<m;i++){
fscanf(fin,"%d %d\n",&a,&b);
graph[a].push_back(b);
}
fclose(fin);
}
void bfs(int x){
viz[x]=1;
for(int j=0;j<graph[x].size();j++)
if(viz[graph[x][j]]==0)
d[graph[x][j]]=d[x]+1;
for(int j=0;j<graph[x].size();j++)
if(viz[graph[x][j]]==0)
bfs(graph[x][j]);
}
void rezolva(){
d[s]=0;
bfs(s);
}
void afisare(){
for(int i=1;i<=n;i++){
if(d[i]==0){
if(i==s)
fprintf(fout,"0 ");
else
fprintf(fout,"-1 ");
}
else
fprintf(fout,"%d ",d[i]);
}
fclose(fout);
}
int main()
{
citire();
rezolva();
afisare();
return 0;
}