Pagini recente » Cod sursa (job #2927022) | Clasamentul arhivei de probleme | Cod sursa (job #1672696) | Cod sursa (job #1672516) | Cod sursa (job #1459214)
#include <stdio.h>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
int N, M, s;
vector < vector<int> > neigh;
vector<int> d;
vector<bool> visited;
queue<int> Q;
void read(){
in >> N >> M >> s;
d.resize(N+1);
visited.resize(N+1);
for(int i = 0; i <= N; ++i){
vector<int> v;
neigh.push_back(v);
}
int x, y;
for(int i = 0; i < M; ++i){
in >> x >> y;
neigh[x].push_back(y);
}
}
void BFS(int source){
d[source] = 0;
Q.push(source);
visited[source] = true;
while(!Q.empty()){
int u = Q.front();
Q.pop();
for(unsigned int i = 0; i < neigh[u].size(); ++i){
int v = neigh[u][i];
if(visited[v] == false){
d[v] = d[u] + 1;
Q.push(v);
visited[v] = true;
}
}
}
}
void write(){
for(int i = 1; i <= N; ++i){
if(i != s && d[i] == 0)
out << -1 << " ";
else out << d[i] << " ";
}
}
int main(){
read();
BFS(s);
write();
}