Pagini recente » Cod sursa (job #1671920) | Cod sursa (job #939465) | Cod sursa (job #2818291) | Cod sursa (job #2393975) | Cod sursa (job #2854622)
#include <iostream>
#include <vector>
#define MAXN 100000
using namespace std;
struct node{
vector <int> edges;
int dist;
};
node graph[MAXN + 1];
int s;
static inline void addEdge(int a, int b) {
graph[a].edges.push_back(b);
}
void bfs(int pos, int dist) {
int i;
graph[pos].dist = dist;
for ( i = 0; i < graph[pos].edges.size(); i++ ) {
if ( (graph[graph[pos].edges[i]].dist == 0 || graph[graph[pos].edges[i]].dist > dist) && graph[pos].edges[i] != s ) {
bfs(graph[pos].edges[i], dist + 1);
}
}
}
int main() {
FILE *fin, *fout;
fin = fopen("bfs.in", "r");
fout = fopen("bfs.out", "w");
int n, m, a, b, i;
fscanf(fin, "%d%d%d", &n, &m, &s);
for ( i = 0; i < m; i++ ) {
fscanf(fin, "%d%d", &a, &b);
addEdge(a, b);
}
bfs(s, 0);
for ( i = 1; i <= n; i++ ) {
if ( graph[i].dist > 0 || i == s )
fprintf(fout, "%d ", graph[i].dist);
else
fprintf(fout, "-1 ");
}
fclose(fin);
fclose(fout);
return 0;
}