Pagini recente » Cod sursa (job #771925) | Cod sursa (job #601569) | Cod sursa (job #176265) | Cod sursa (job #2604889) | Cod sursa (job #399087)
Cod sursa(job #399087)
#include <iostream>
#include <vector>
#include <queue>
#define maxn 100010
using namespace std;
//n - noduri
//m - arce
int n,m,s,i,x,y,nod;
int cost[maxn],g[maxn];
vector<int> gr[maxn];
queue<int> coada;
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
cin >> n >> m >> s;
//Citesc arcele
for (i=0; i<m; i++) {
cin >> x >> y;
gr[x].push_back(y);
}
//Se seteaza toate nodurile nevizitate
fill(cost, cost+maxn, -1);
for (i=1; i<=n; i++) {
g[i] = gr[i].size();
}
//Se adauga primul nod in coada
//Se seteaza costul 0 pt acel nod
coada.push(s);
cost[s] = 0;
while (!coada.empty()) {
//Se scoate din coada
nod = coada.front();
//Se sterge elementul din coada
coada.pop();
for (i=0; i<g[nod]; i++) {
if (cost[gr[nod][i]] == -1) {
coada.push(gr[nod][i]);
cost[gr[nod][i]] = cost[nod] + 1;
}
}
}
//Afiseaza rezultatul
for (i=1;i<=n;i++) {
cout << cost[i] << " ";
}
return 0;
}