Pagini recente » Cod sursa (job #2785773) | Cod sursa (job #795440) | Cod sursa (job #2035320) | Cod sursa (job #1106237) | Cod sursa (job #779287)
Cod sursa(job #779287)
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
using namespace std;
#define nmax 100010
#define pb push_back
int N, M, S, dist[nmax], X, Y;
vector<int> G[nmax];
void BFS();
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int i;
scanf("%i %i %i", &N, &M, &S);
for(; M; M --)
{
scanf("%i %i", &X, &Y);
G[X].pb(Y);
}
BFS();
for(i = 1; i <= N; i++) printf("%i ", dist[i]);
scanf("%i", &i);
return 0;
}
void BFS()
{
int i, node;
vector<int> :: iterator it;
for(i = 1; i <= N; i++) dist[i] = -1;
dist[S] = 0;
queue<int> Q;
Q.push(S);
while(!Q.empty())
{
node = Q.front();
Q.pop();
for(it = G[node].begin(); it != G[node].end(); ++ it)
if(dist[*it] == -1)
dist[*it] = dist[node] + 1, Q.push(*it);
}
}