Pagini recente » Cod sursa (job #1334272) | Cod sursa (job #624243) | Cod sursa (job #1819501) | Cod sursa (job #2925505) | Cod sursa (job #1705873)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
#define Nmax 100000
long N,M,S;
vector< vector<long> > adj_mat(Nmax, vector<long>());
long dist[Nmax];
void bfs(long s)
{
memset(dist , -1 , sizeof(dist));
dist[s] = 0;
queue<long > Q;
Q.push(s);
while(!Q.empty())
{
long t = Q.front();
Q.pop();
for(long i = 0 ; i < adj_mat[t].size(); i++)
{
long vecin = adj_mat[t][i];
if(dist[vecin] == -1)
{
Q.push(vecin);
dist[vecin] = dist[t] + 1;
}
}
}
}
int main()
{
FILE *fin = fopen("bfs.in", "r");
FILE *fout = fopen("bfs.out", "w");
fscanf(fin, "%li %li %li", &N, &M, &S);
long a,b;
for(long i = 0 ; i < M; i++)
{
fscanf(fin,"%lu %lu", &a, &b);
adj_mat[a].push_back(b);
}
bfs(S);
for(long i = 1 ; i <= N; i++ )
fprintf(fout, "%li ", dist[i]);
fclose(fin);
fclose(fout);
}