Pagini recente » Cod sursa (job #306735) | Istoria paginii runda/pregatire_oni2011_runda3/clasament | Cod sursa (job #2406449) | Cod sursa (job #2011335) | Cod sursa (job #1890167)
#include <cstdio>
#include <queue>
#include <list>
using namespace std;
int vertices, edges, start, x, y;
list<int> adj[100001];
int cost[100001];
void BFS(int start){
queue<int> Q;
Q.push(start);
for(int i = 1; i <= vertices; i++){
cost[i] = -1;
}
cost[start]++;
while(!Q.empty()){
int current = Q.front(); Q.pop();
for(list<int> :: iterator it = adj[current].begin(); it != adj[current].end(); it++){
if(cost[*it] == -1){
Q.push(*it);
cost[*it] = cost[current] + 1;
}
}
}
}
int main(){
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d %d %d", &vertices, &edges, &start);
for(int i = 0; i < edges; i++){
scanf("%d %d", &x, &y);
adj[x].push_back(y);
}BFS(start);
for(int i = 1; i <= vertices; i++){
printf("%d ", cost[i]);
}
return 0;
}