Pagini recente » Cod sursa (job #2675542) | Cod sursa (job #2198103) | Cod sursa (job #3217787) | Cod sursa (job #1035726) | Cod sursa (job #2797164)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
FILE *fin, *fout;
int N, M, S, x, y;
const int NMAX=100001;
vector <int>graph[NMAX];
int nrArce[NMAX];
void bfs(){
queue <int> q;
q.push(S);
nrArce[S]=0;
int actual;
while(!q.empty()){
actual=q.front();
q.pop();
for(auto itr: graph[actual]){
if(nrArce[itr]==-1){
//nu am mai ajuns aici
nrArce[itr]=nrArce[actual]+1;
q.push(itr);
}
}
}
}
int main()
{
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
fscanf(fin,"%d %d %d",&N, &M, &S);
for(int i=0;i<M;i++){
fscanf(fin,"%d %d", &x, &y);
graph[x].push_back(y);
}
for(int i=1;i<=N;i++){
nrArce[i]=-1;
}
bfs();
for(int i=1;i<=N;i++){
fprintf(fout, "%d ",nrArce[i]);
}
return 0;
}