Pagini recente » Cod sursa (job #2876515) | Cod sursa (job #3226896) | Cod sursa (job #2971224) | Cod sursa (job #2583597) | Cod sursa (job #2662616)
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
vector < int > adj[NMAX];
int n, m, start;
bool visited[NMAX];
queue <int > q;
int nr[NMAX];
int egal;
void read(){
in>>n>>m>>start;
for(int i = 0; i < m; ++i){
int x, y;
in>>x>>y;
adj[x].push_back(y);
if(x == y )
egal = 1;
}
}
void bfs(){
q.push(start);
visited[start] = 1;
while(!q.empty()){
int node = q.front();
q.pop();
for(int j = 0; j < adj[node].size(); ++ j ){
if(!visited[adj[node][j]]){
q.push(adj[node][j]);
visited[adj[node][j]] = 1;
nr[adj[node][j]] = nr[node] + 1;
}
}
}
}
int main(){
read();
for(int i = 1; i <= n; ++i){
sort(adj[i].begin(), adj[i].end());
}
bfs();
for(int i = 1; i <= n; i ++){
if(i == start && egal == 1)
out<<nr[i]<<" ";
else if(nr[i] == 0)
out<<-1<<" ";
else
out<<nr[i]<<" ";
}
return 0;
}