Pagini recente » Cod sursa (job #2597276) | Cod sursa (job #2721600) | Cod sursa (job #2066626) | Cod sursa (job #624084) | Cod sursa (job #1736533)
#include <iostream>
#include <queue>
#include <vector>
#include <stdio.h>
#include <cstring>
#define in "bfs.in"
#define out "bfs.out"
using namespace std;
FILE* f = fopen(in, "rt");
FILE* g = fopen(out, "w");
queue<int> q;
vector<int> graph[100005];
int distanta[100005];
int n, m, s;
int nod, vecin;
void BFS(int start)
{
q.push(start);
distanta[start] = 0;
int now;
while(!q.empty()){
now = q.front();
for(int i=0; i<graph[now].size(); i++){
if(distanta[graph[now][i]] == -1){
distanta[graph[now][i]] = distanta[now] + 1;
q.push(graph[now][i]);
}
}
q.pop();
}
}
int main()
{
fscanf(f, "%d%d%d", &n, &m, &s);
for(int i=0; i<m; i++){
fscanf(f, "%d%d", &nod, &vecin);
graph[nod].push_back(vecin);
}
memset(distanta, -1, sizeof(distanta));
BFS(s);
for(int i=1; i<=n; i++){
fprintf(g, "%d", distanta[i]);
fprintf(g, "%c", ' ');
}
return 0;
}