Pagini recente » Cod sursa (job #1505967) | Cod sursa (job #1120368) | Cod sursa (job #1454453) | Cod sursa (job #168358) | Cod sursa (job #1430728)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
int N, M;
bool viz[100001];
vector<int> dist(100001, -1);
void bfs(int nod, const vector<vector<int> > &vec)
{
queue<int> coada;
coada.push(nod);
viz[nod] = true;
dist[nod] = 0;
while(!coada.empty())
{
nod = coada.front();
coada.pop();
int nr_vec = vec[nod].size();
for(int i = 0; i < nr_vec; i++)
if(viz[ vec[nod][i] ] == false)
{
viz[vec[nod][i]] = true;
dist[vec[nod][i]] = dist[nod] + 1;
coada.push(vec[nod][i]);
}
}
}
int main()
{
FILE *f = fopen("bfs.in", "r");
FILE *g = fopen("bfs.out", "w");
int root;
fscanf(f, "%d %d %d", &N, &M, &root);
vector<int> aux;
vector<vector<int> > vecini(N + 1, aux);
for(int i = 0; i < M; i++)
{
int x, y;
fscanf(f, "%d %d", &x, &y);
vecini[x].push_back(y);
}
bfs(root, vecini);
for(int i = 1; i <= N; i++)
fprintf(g, "%d ", dist[i]);
fprintf(g, "\n");
fclose(f);
fclose(g);
return 0;
}