Pagini recente » Cod sursa (job #3224623) | Cod sursa (job #265702) | Cod sursa (job #3031980) | Cod sursa (job #3253305) | Cod sursa (job #3249185)
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("bfs.in");
ofstream cout("bfs.out");
vector <int> g[100005];
int f[100005];
struct nr{
int c,val;
};
queue <nr> q;
void fct()
{
nr k=q.front();
if(f[k.val])
{
q.pop();
if(q.size())
fct();
return;
}
f[k.val]=k.c;
int n=g[k.val].size();
for(int i=0;i<n;i++)
{
if(f[g[k.val][i]]==0)
{
nr b;
b.val=g[k.val][i];
b.c=k.c+1;
q.push(b);
}
}
q.pop();
if(q.size())
fct();
}
int main()
{
int n,m,z;
cin>>n>>m>>z;
for(int i=0;i<m;i++)
{
int x,y;
cin>>x>>y;
g[x].push_back(y);
}
nr a;
a.c=0;
a.val=z;
q.push(a);
fct();
f[z]=0;
for(int i=1;i<=n;i++)
{
if(f[i]>0)
cout<<f[i]<<" ";
else{
if(i==z)
cout<<0<<" ";
else cout<<-1<<" ";
}
}
return 0;
}