Cod sursa(job #629226)

Utilizator MariusMarius Stroe Marius Data 2 noiembrie 2011 21:33:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#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;
}