Pagini recente » Cod sursa (job #885906) | Cod sursa (job #3185949) | Cod sursa (job #827699) | Cod sursa (job #2287382) | Cod sursa (job #1245234)
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 100005
using namespace std;
int N, M, S;
vector<int> v[NMAX];
int dist[NMAX];
void read()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d", &N, &M, &S);
int x, y;
for(int i = 1; i <= M; i++)
{
scanf("%d%d", &x, &y);
v[x].push_back(y);
}
for(int i = 1; i <= N; i++)
dist[i] = N;
}
void bfs()
{
queue<int> q;
q.push(S);
dist[S] = 0;
while(!q.empty())
{
int x = q.front();
q.pop();
for(unsigned int i = 0; i < v[x].size(); i++)
if(dist[v[x][i]] > dist[x] + 1)
{
dist[v[x][i]] = dist[x]+1;
q.push(v[x][i]);
}
}
}
void printSolution()
{
for(int i = 1; i <= N; i++)
printf("%d ", dist[i] == N ? -1 : dist[i]);
}
int main() {
read();
bfs();
printSolution();
return 0;
}