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