Pagini recente » Cod sursa (job #2669950) | Cod sursa (job #1129794) | Cod sursa (job #1904377) | Cod sursa (job #1795650) | Cod sursa (job #2194155)
#include <iostream>
#include <stdio.h>
#include <deque>
#define maxim 2000000000
using namespace std;
FILE *f,*g;
int m,n,s;
int v[100],a[2][100],fr[1000002];
deque <int> coada;
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++)
fr[i]=maxim;
coada.push_back(s);
fr[s]=0;
while(!coada.empty())
{
x=coada.front();
ok=v[x];
nr=fr[x];
if(nr==maxim)
nr=0;
while(ok)
{
if(fr[a[0][ok]]==maxim && nr+1<fr[a[0][ok]])
{
coada.push_back(ok);
fr[a[0][ok]]=nr+1;
}
ok=a[1][ok];
}
coada.pop_front();
}
for(i=1;i<=n;i++)
if(fr[i]!=maxim)
fprintf(g,"%d ",fr[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;
}