Pagini recente » Cod sursa (job #2974708) | Cod sursa (job #631608) | Cod sursa (job #2208080) | Cod sursa (job #667561) | Cod sursa (job #2678154)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
queue < pair < int,int > > q;
vector <int> l[100005];
int n,m,s,sol[100005],viz[100005];
void citire()
{
in>>n>>m>>s;
for(; m--;)
{
int a,b;
in>>a>>b;
l[a].push_back(b);
}
}
void bfs(int cer)
{
if(cer==s)
{
q.pop();
sol[cer]=0;
return;
}
while(!q.empty())
{
int x=q.front().first;
int y=q.front().second;
q.pop();
if(!viz[x])
{
viz[x]=1;
for( vector <int> :: iterator i=l[x].begin(); i!=l[x].end(); i++)
{
if(*i==cer)
{
sol[cer]=y+1;
return;
}
q.push({*i,y+1});
}
}
}
}
void prg()
{
fill(sol+1,sol+n+1,-1);
for(int i=1; i<=n; i++)
{
fill(viz+1,viz+n+1,0);
q.push({s,0});
bfs(i);
}
}
void afis()
{
for(int i=1; i<=n; i++)
out<<sol[i]<<' ';
}
int main()
{
citire();
prg();
afis();
in.close();
out.close();
return 0;
}