Pagini recente » Cod sursa (job #1385761) | Cod sursa (job #1075305) | Cod sursa (job #2620799) | Cod sursa (job #388308) | Cod sursa (job #798109)
Cod sursa(job #798109)
#include <cstdio>
#include <vector>
#include <queue>
#define nMax 100100
using namespace std;
vector <int> graf[nMax];
int n;
int drum[nMax];
int viz[nMax];
queue <int> q;
void citire(){
int m;
int inceput;
scanf ("%d", &n);
scanf ("%d %d", &m, &inceput);
while (m -- ){
int x;
int y;
scanf ("%d", &x);
scanf ("%d", &y);
graf[x].push_back (y);
}
for (int i = 1; i <= n; ++ i){
drum[i] = -1;
}
drum[inceput] = 0;
viz[inceput] = 1;
q.push (inceput);
}
void bfs(){
while (!q.empty()){
int nod = q.front();
q.pop();
for (unsigned int i = 0; i < graf[nod].size(); ++ i){
if (viz[graf[nod][i]] == 0){
viz[graf[nod][i]] = 1;
drum[graf[nod][i]] = drum[nod] + 1;
q.push (graf[nod][i]);
}
}
}
}
void afisare(){
for (int i = 1; i <= n; ++ i){
printf ("%d ", drum[i]);
}
}
int main()
{
freopen ("bfs.in", "r", stdin);
freopen ("bfs.out", "w", stdout);
citire();
bfs();
afisare();
return 0;
}