Pagini recente » Cod sursa (job #1195619) | Cod sursa (job #1726645) | Cod sursa (job #2110222) | Cod sursa (job #1157906) | Cod sursa (job #2785842)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
const int MAXN = 100000;
int n, root;
struct nod{
vector<int> next;
int dis;
};
nod noduri[MAXN + 1];
void read_graph(){
int m, i, x, y;
in>>n>>m>>root;
for( i = 0; i < m; i++ ){
in>>x>>y;
noduri[x].next.push_back(y);
}
/*for( i = 0; i < n; i++ ){
out<<"numar nod: "<<i + 1<<" ";
for( int j = 0; j < noduri[i].next.size(); j++ )
out<<noduri[i].next[j] + 1<<" ";
out<<'\n';
}*/
}
queue <int> q;
//vector<int> dis;
void bfs(int root){
int i, j;
for( i = 1; i <= n; i++ )
noduri[i].dis = -1;
q.push(root);
noduri[root].dis = 0;
while( !q.empty() ){
i = q.front();
for( j = 0; j < noduri[i].next.size(); j++ ){
if( noduri[noduri[i].next[j]].dis == -1 ){
noduri[noduri[i].next[j]].dis = noduri[i].dis + 1;
q.push(noduri[i].next[j]);
}
}
q.pop();
}
}
int main(){
int i;
read_graph();
bfs(root);
for( i = 1; i <= n; i++){
out<<noduri[i].dis<<" ";
}
return 0;
}