Pagini recente » Cod sursa (job #526008) | Cod sursa (job #2119128) | Cod sursa (job #1602207) | Cod sursa (job #2171875) | Cod sursa (job #1098653)
/* Parcurgerea in latime - BFS */
#include <cstdio>
#include <vector>
using namespace std;
#define MAX 100001
vector<int> Edge[MAX];
int N, M, S, D[MAX], C[MAX], P, U, X, Y;
void BFS()
{
C[P = U = 1] = S;
while (P <= U)
{
X = C[P++];
for (int i = 0; i < Edge[X].size(); i++)
{
Y = Edge[X][i];
if (Y == S) continue;
if (D[Y] == 0)
{
D[Y] = D[X] + 1;
C[++U] = Y;
}
}
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d", &N, &M, &S);
for (int i = 1; i <= M; i++)
{
scanf("%d %d", &X, &Y);
Edge[X].push_back(Y);
}
BFS();
for (int i = 1; i <= N; i++)
{
if (i == S) printf("0 "); else printf("%d ", D[i] == 0 ? -1 : D[i]);
}
}