Cod sursa(job #549643)
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
struct nod{
int visited;
int cost;
vector<nod*> next;};
void bfs(nod*start){
nod*current;
queue<nod*> coada;
coada.push(start);
start->cost=0;
while(!coada.empty()){
current=coada.front();
coada.pop();
current->visited=1;
for(int i=0;i<current->next.size();i++)
if(current->next[i]->visited==0){
coada.push(current->next[i]);
current->next[i]->cost=current->cost+1;}}}
int main(){
int n,m,s,d1,d2;
vector<nod*> graf;
ifstream f("bfs.in");
ofstream g("bfs.out");
f>>n>>m>>s;
for(int i=0;i<n;i++){graf.push_back(new nod);graf[i]->cost=-1;}
for(int i=0;i<m;i++){
f>>d1>>d2;
graf[d1-1]->next.push_back(graf[d2-1]);}
bfs(graf[s-1]);
for(int i=0;i<n;i++)g<<graf[i]->cost<<' ';
//f.close();g.close();
return 0;}