Pagini recente » Cod sursa (job #2634086) | Cod sursa (job #2163311) | Cod sursa (job #211011) | Cod sursa (job #2745916) | Cod sursa (job #1865287)
#include<stdio.h>
#include<vector>
#define NMAX 100001
using namespace std;
vector <int> v[NMAX];
int stiv[NMAX];
int viz[NMAX];
int main (){
FILE *in,*out;
in = fopen ("bfs.in","r");
out = fopen ("bfs.out","w");
int n,m,nods,i,a,b,inc,sf,nod;
fscanf(in,"%d%d%d",&n,&m,&nods);
for (i=1;i<=m;i++){
fscanf(in,"%d%d",&a,&b);/// muchie a -> b
v[a].push_back (b);
}
for (i=1;i<=n;i++)
viz[i] = -1;
inc = sf = 1;
viz[nods] = 0;
stiv[inc] = nods;
while (inc <= sf){///stiva nu e goala
nod = stiv[inc];
for (vector <int>::iterator it=v[nod].begin(); it != v[nod].end(); ++it){
/// iterare prin vecinii lui "nod"
if (viz[*it] == -1){
viz[*it] = viz[nod] + 1;///pt calc lung
stiv[++sf] = *it;
///prev[*it] = nod;
///lung[*it] = lung[nod] + 1;
}
}
inc ++;
}
for (i=1;i<=n;i++)
fprintf(out,"%d ",viz[i]);
fclose(in);
fclose(out);
return 0;
}