Pagini recente » Cod sursa (job #980971) | Cod sursa (job #468568) | Cod sursa (job #1732281) | Cod sursa (job #2346870) | Cod sursa (job #1443548)
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
const int Nm = 100005;
vector <int> G[Nm];
int N,M,S,Nr,Sol[Nm],Q[Nm];
void Read()
{
int a,b;
freopen("bfs.in","r",stdin);
scanf("%d %d %d",&N,&M,&S);
for (int i = 1;i <= M;i++)
{
scanf("%d %d",&a,&b);
G[a].push_back(b);
}
}
void BFS(int X)
{
memset(Sol,-1,sizeof(Sol));
Nr = 1;
Sol[X] = 0;
Q[1] = X;
vector<int>::iterator j;
for (int i = 1;i <= Nr;i++)
{
for (j = G[Q[i]].begin();j != G[Q[i]].end();j++)
if (Sol[*j] == -1)
{
Q[++Nr] = *j;
Sol[Q[Nr]] = Sol[Q[i]] + 1;
}
}
}
void Write()
{
freopen("bfs.out","w",stdout);
for (int i = 1;i <= N;i++)
printf("%d ",Sol[i]);
printf("\n");
}
int main()
{
Read();
BFS(S);
Write();
return 0;
}