Pagini recente » Rating Dan George Filimon (plastik) | Cod sursa (job #629217) | Cod sursa (job #2095727) | Cod sursa (job #1226570) | Cod sursa (job #629226)
Cod sursa(job #629226)
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const char iname[] = "bfs.in";
const char oname[] = "bfs.out";
const int EMPTY = -1;
const int MAX_N = 100000;
vector <int> adj[MAX_N], dist;
queue <int> que;
void go(int start_node, vector <int>* adj) {
dist[start_node] = 0;
que.push(start_node);
while (!que.empty()) {
int u = que.front();
que.pop();
vector <int>::iterator it;
for (it = adj[u].begin(); it != adj[u].end(); ++ it) {
if (dist[*it] == EMPTY) {
dist[*it] = dist[u] + 1;
que.push(*it);
}
}
}
}
int main(void) {
int nodes, edges, start_node;
FILE *fi = fopen(iname, "r");
fscanf(fi, "%d %d %d", &nodes, &edges, &start_node);
for (int i = 0; i < edges; ++ i) {
int u, v;
fscanf(fi, "%d %d", &u, &v);
adj[u - 1].push_back(v - 1);
}
fclose(fi);
dist.resize(nodes);
dist.assign(dist.size(), EMPTY);
go(start_node - 1, adj);
FILE *fo = fopen(oname, "w");
for (int i = 0; i < nodes; ++ i) {
fprintf(fo, "%d ", dist[i]);
}
fclose(fo);
return 0;
}