Pagini recente » Cod sursa (job #2989267) | Cod sursa (job #605694) | Cod sursa (job #2240416) | Cod sursa (job #1741113) | Cod sursa (job #2194321)
#include <iostream>
#include <stdio.h>
#include <deque>
#include <bitset>
#define maxim 2000000000
using namespace std;
FILE *f,*g;
deque <int> coada;
bitset <1000002> fr;
int v[1000002],a[2][1000002], drum[1000002];
int m,n,s;
void citire()
{
int k=1,i,j;
fscanf(f, "%d %d %d", &n, &m, &s);
for(int l=1; l<=m; l++)
{
fscanf(f, "%d %d", &i, &j);
a[0][k]=j;
a[1][k]=v[i];
v[i]=k;
k++;
}
}
void afisare()
{ int i,x,ok,nr;
for(i=1;i<=n;i++)
drum[i]=maxim;
coada.push_back(s);
fr[s]=1;
drum[s]=0;
while(!coada.empty())
{
x=coada.front();
ok=v[x];
nr=drum[x];
while(ok)
{
if(!fr[a[0][ok]] || nr+1<drum[a[0][ok]])
{
coada.push_back(a[0][ok]);
drum[a[0][ok]]=nr+1;
fr[a[0][ok]]=nr+1;
}
ok=a[1][ok];
}
coada.pop_front();
}
for(i=1;i<=n;i++)
if(drum[i]!=maxim)
fprintf(g,"%d ",drum[i]);
else
fprintf(g,"-1 ");
}
int main()
{
f=fopen("bfs.in","r");
g=fopen("bfs.out","w");
citire();
afisare();
fclose(f);
fclose(g);
return 0;
}