Pagini recente » Cod sursa (job #2624599) | Cod sursa (job #3003617) | Cod sursa (job #955675) | Cod sursa (job #2620638) | Cod sursa (job #2197859)
#include <stdio.h>
#include <climits>
#include <queue>
using namespace std;
FILE *f,*g;
queue <int> coada;
int start[100010],t[2][1000010],drm[100010];
void BFS(int s)
{
drm[s]=1;
int nod,vecin,poz,i;
coada.push(s);
while(!coada.empty())
{
nod=coada.front();
coada.pop();
poz=start[nod];
while(poz)
{
if(drm[t[1][poz]]>drm[nod]+1)
drm[t[1][poz]]=drm[nod]+1,coada.push(t[1][poz]);
poz=t[0][poz];
}
}
}
void Afisare(int n)
{
int i;
for(i=1;i<=n;i++)
if(drm[i]==INT_MAX)
fprintf(g,"-1 ");
else
fprintf(g,"%d ",drm[i]-1);
}
int main()
{
f=fopen("bfs.in","r");
g=fopen("bfs.out","w");
int n,m,s,i,x,y;
fscanf(f,"%d %d %d\n",&n,&m,&s);
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d",&x,&y);
t[1][i]=y;
t[0][i]=start[x];
start[x]=i;
}
for(i=1;i<=n;i++)
drm[i]=INT_MAX;
BFS(s);
Afisare(n);
fclose(f),fclose(g);
return 0;
}