Pagini recente » Cod sursa (job #912364) | Cod sursa (job #2285843) | Cod sursa (job #1503604) | Cod sursa (job #1760952) | Cod sursa (job #1193556)
#include <cstdio>
#include <vector>
#include <climits>
#include <queue>
using namespace std;
#define NMAX 100003
int D[NMAX];
int N,M,S,i,X,Y;
vector < int > G[NMAX];
queue <int> Q;
void BFS(int nod)
{
vector < int > :: iterator it;
Q.push(nod);
D[nod]=0;
while (!Q.empty())
{
for (it=G[Q.front()].begin();it!=G[Q.front()].end();++it)
{
if (D[*it]!=INT_MAX) continue;
D[*it]=D[Q.front()]+1;
Q.push(*it);
}
Q.pop();
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d",&N,&M,&S);
for (i=1;i<=N;++i)
D[i]=INT_MAX;
for (i=1;i<=M;++i)
{
scanf("%d%d",&X,&Y);
G[X].push_back(Y);
}
BFS(S);
for (i=1;i<=N;++i)
(D[i]==INT_MAX) ? printf("-1 ") : printf("%d ",D[i]);
return 0;
}