Pagini recente » Cod sursa (job #2596620) | Cod sursa (job #1358784) | Cod sursa (job #401415) | Cod sursa (job #2397058) | Cod sursa (job #1177496)
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
#define maxn 100005
vector<int> muchii[maxn];
queue<int>coada;
int i,n,m,a,cost[maxn],vizitat[maxn],k,ok;
void bfs(int nodinc)
{
coada.push(nodinc);
vizitat[nodinc]=1;
cost[nodinc]=k;
k++;
while(!coada.empty())
{
nodinc=coada.front();
coada.pop();
for (vector<int>::iterator i=muchii[nodinc].begin();i!=muchii[nodinc].end();i++)
if(vizitat[*i]!=1)
{
vizitat[*i]=1;
cost[*i]=k;
coada.push(*i);
ok=1;
}
if (ok==1)
k++;
ok=0;
}
}
int main ()
{
freopen ("bfs.in","r",stdin);
freopen ("bfs.out","w",stdout);
int n1,n2;
scanf("%d%d%d",&n,&m,&a);
for(i=1;i<=m;i++)
{
scanf("%d%d",&n1,&n2);
muchii[n1].push_back(n2);
}
bfs (a);
for(i=1;i<=n;i++)
if(vizitat[i]!=1)
cost[i]=-1;
for(i=1;i<=n;i++)
printf("%d ",cost[i]);
return 0;
}