Pagini recente » Cod sursa (job #683974) | Cod sursa (job #575968) | avram_iancu_10 | Cod sursa (job #2958637) | Cod sursa (job #2316855)
#include <cstdio>
#include <deque>
using namespace std;
FILE *f,*g;
int start[100002], t[2][1000002];
bool viz[100002];
int v[100002],n;
deque <int> coada;
void bfs(int nod)
{
int poz,vecin;
coada.push_back(nod);
v[nod]=0;
viz[nod]=1;
while(!coada.empty())
{
nod=coada.front();
coada.pop_front();
viz[nod]=0;
poz=start[nod];
while(poz)
{
vecin=t[0][poz];
if(v[nod]+1<v[vecin])
{
v[vecin]=v[nod]+1;
if(viz[vecin]==0)
viz[vecin]=1,coada.push_back(vecin);
}
poz=t[1][poz];
}
}
}
int main()
{
f=fopen("bfs.in","r");
g=fopen("bfs.out","w");
int m,Nod;
fscanf(f,"%d %d %d",&n,&m,&Nod);
int x,y,k=0;
for(int i=1;i<=m;++i)
{
fscanf(f,"%d %d",&x,&y);
t[0][++k]=y;
t[1][k]=start[x];
start[x]=k;
}
for(int i=1;i<=n;++i)
v[i]=1999999999;
bfs(Nod);
for(int i=1;i<=n;++i)
{
if(v[i]==1999999999)
fprintf(g,"-1 ");
else
fprintf(g,"%d ",v[i]);
}
fclose(f);
fclose(g);
return 0;
}