Pagini recente » Cod sursa (job #1046374) | Cod sursa (job #1164762) | Cod sursa (job #2601288) | Cod sursa (job #1047790) | Cod sursa (job #411409)
Cod sursa(job #411409)
#include<stdio.h>
#include<vector>
using namespace std;
vector<int> a[100001];
void bf(int n, int pus[100001], int nodurip[100001], int niv[100001])
{
pus[n]=1;
niv[n]=0;
nodurip[1]=n;
int stanga,dreapta;
stanga=1;
dreapta=1;
while(stanga<=dreapta)
{
for(int i=0; i<a[n].size(); ++i)
if(!pus[a[n][i]])
{
++dreapta;
pus[a[n][i]]=1;
niv[a[n][i]]=niv[n]+1;
nodurip[dreapta]=a[n][i];
}
++stanga;
n=nodurip[stanga];
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int n,m,s,x,y,niv[100001],pus[100001],nodurip[100001];
scanf("%d %d %d",&n,&m,&s);
for(int i=1; i<=m; i++)
{
scanf("%d %d",&x,&y);
a[x].push_back(y);
}
memset(pus, 0, sizeof(pus));
memset(niv, -1, sizeof(pus));
bf(s,pus,nodurip,niv);
for(int i=1; i<=n; ++i)
printf("%d ",niv[i]);
printf("\n");
//printf("%d",a[2][a[2].size()-1]);
return 0;
}