Pagini recente » Cod sursa (job #663397) | Cod sursa (job #1733145) | Cod sursa (job #1932679) | Cod sursa (job #1464740) | Cod sursa (job #2007021)
#include <bits/stdc++.h>
#define Nmax 100002
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
vector<int> G[Nmax];
queue<int> Q;
int N,M,a,b,V[Nmax],s;
void BFS(int n){
for(int i=1;i<=N;++i)V[i]=INT_MAX;
V[n]=0;
Q.push(n);
while(!Q.empty()){
int x=Q.front();
Q.pop();
for(vector<int>::iterator it=G[x].begin();it!=G[x].end();++it)
if(V[*it]==INT_MAX){
Q.push(*it);
V[*it]=V[x]+1;
}
}
}
int main()
{
fin>>N>>M>>s;
for(int i=1;i<=M;++i){
fin>>a>>b;
G[a].push_back(b);
}
/*for(int i=1;i<=N;++i){
cout<<"Adjacent nodes to #"<<i<<" are: ";
for(vector<int> :: iterator it=G[i].begin();it!=G[i].end();++it)
cout<<*it<<" ";
cout<<"\n";
}
for(int i=1;i<=N;++i){
BFS(i);
cout<<"\nDistances to other nodes from node #"<<i<<" are:\n";
for(int j=1;j<=N;++j)cout<<"#"<<j<<":"<<V[j]<<'\n';
}*/
BFS(s);
for(int i=1;i<=N;++i)
fout<<((V[i]!=INT_MAX)?V[i]:-1)<<' ';
fout<<endl;
return 0;
}