Pagini recente » Cod sursa (job #204310) | Cod sursa (job #2799306) | Cod sursa (job #1502553) | Cod sursa (job #2170060) | Cod sursa (job #2148147)
#include <cstdio>
#include <vector>
#define N 100002
#define M 1000002
using namespace std;
int n, m, nod, k, v[2][M], start[N], d[N];
void bfs(int x)
{
bool ok[N]={0};
vector<int> A;
A.push_back(x);
ok[x]=1;
while(A.size())
{
int w=start[A[0]];
while(w)
{
if(!ok[v[0][w]])
{
A.push_back(v[0][w]);
ok[v[0][w]]=1;
d[v[0][w]]=d[A[0]]+1;
}
w=v[1][w];
}
A.erase(A.begin());
}
for(int i=1; i<nod; i++)
{
if(d[i])
{
printf("%d ", d[i]);
}
else
{
printf("-1 ");
}
}
printf("0 ");
for(int i=nod+1; i<=n; i++)
{
if(d[i])
{
printf("%d ", d[i]);
}
else
{
printf("-1 ");
}
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int i,j;
scanf("%d%d%d", &n, &m, &nod);
while(m)
{
scanf("%d%d", &i, &j);
k++;
v[0][k]=j;
v[1][k]=start[i];
start[i]=k;
m--;
}
bfs(nod);
return 0;
}