Pagini recente » Cod sursa (job #821574) | Cod sursa (job #1552843) | tema | Cod sursa (job #2071664) | Cod sursa (job #1571369)
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAX_N 100010
vector<int> A[MAX_N]; // Liste de adiacenta
int COST[MAX_N]; // Vectorul de costuri
int C[MAX_N]; // Coada
bool V[MAX_N]; // Vectorul pt elementele vizitate
void BFS(int nod) {
int p = 1,
u = 1,
elemCurent,
elemVecin;
C[1] = nod;
V[nod] = 1;
COST[nod] = 0;
while (p <= u) { // Cat timp avem elemente in coada
elemCurent = C[p];
for (vector<int>::iterator i = A[elemCurent].begin(); i != A[elemCurent].end(); ++i) { // Parcurgem toti vecinii el. curent
elemVecin = *i;
if (V[elemVecin] == 0) { // Daca nu a fost vizitat
C[++u] = elemVecin;
V[elemVecin] = 1;
COST[elemVecin] = 1 + COST[elemCurent]; // Calculam costul sau
}
}
++p;
}
}
int n, m, s;
void file_in() {
int x, y;
if (freopen("bfs.in", "rt", stdin));
if (scanf("%d %d %d", &n, &m, &s));
for (int i=1; i<=m; ++i) {
if (scanf("%d %d", &x, &y));
A[x].push_back(y);
}
for (int i=1; i<=n; ++i)
sort(A[i].begin(), A[i].end());
fclose(stdin);
}
void file_out() {
if (freopen("bfs.out", "wt", stdout));
for (int i=1; i<=n; ++i)
printf ("%d ", ((V[i] > 0) ? (COST[i]) : (-1)));
fclose(stdout);
}
int main() {
file_in();
BFS(s);
file_out();
return 0;
}