Pagini recente » Cod sursa (job #2822656) | Cod sursa (job #2102677) | Cod sursa (job #507416) | Cod sursa (job #2561380) | Cod sursa (job #390610)
Cod sursa(job #390610)
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define SIZE 100001
int N, M, S;
vector <int> graf[SIZE];
queue <int> coada;
int color[SIZE], d[SIZE], pred[SIZE], nrvecini[SIZE];
int main()
{
int i, x, y, u, v;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d", &N, &M, &S);
for(i = 1; i <= M; i++)
{
scanf("%d %d", &x, &y);
graf[x].push_back(y);
}
fclose(stdin);
for(i = 1; i <= N; i++)
nrvecini[i] = graf[i].size();
//parcurgere in latime
memset(d, -1, sizeof(d));
color[S] = -1;
d[S] = 0;
coada.push(S);
while(coada.size())
{
u = coada.front();
for( i = 0; i < nrvecini[u]; i++)
{
v = graf[u][i];
if (color[v] == 0)
{
color[v] = -1;
d[v] = d[u] + 1;
pred[v] = u;
coada.push(v);
}
}
coada.pop();
color[u] = -2;
}
for(i = 1; i <= N; i++)
printf("%d ", d[i]);
fclose(stdout);
return 0;
}