Cod sursa(job #2322809)

Utilizator benjamin2205Zeic Beniamin benjamin2205 Data 18 ianuarie 2019 13:46:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.79 kb
#include <bits/stdc++.h>

//N < 100 000
//M < 1 000 000
using namespace std;

ifstream f ("bfs.in");
ofstream g ("bfs.out");

queue <int> coada;
vector <int> adj[100005];

int cost[100005];
int n, m, s;

void citire();
void afisare_lista();

void bfs(int s) {
    int nod;

    // Adauga primul nod in coada
    coada.push(s);
    cost[s] = 1;

    while (!coada.empty()) {
        // Scoate un nod din coada.
        nod = coada.front();
        coada.pop();

//        cout << "nod_curent: " << nod << '\n';

        for (int i = 0; i < adj[nod].size(); ++i) {
//            cout << "vecin: " << adj[nod][i];
            // Daca nu s-a mai trecut prin nodul curent
            if (cost[adj[nod][i]] == 0) {
                // In vectorul de costuri pune costul vecinului drept costul nodului curent
                // plus 1
                cost[adj[nod][i]] = cost[nod] + 1;
                // Adauga toti vecinii in coada
                coada.push(adj[nod][i]);

//                cout << "  MARCAT: " << cost[adj[nod][i]];
            }
//            cout << '\n';
        }

//        cout << '\n';
    }

}

void afisare_rezultat() {
    for (int i = 1; i <= n; ++i) {
        if (cost[i] == 0)
            g << -1 << ' ';
        else
            g << cost[i] - 1<< ' ';
    }
}

int main()
{
    citire();
    bfs(s);
    afisare_rezultat();
    return 0;
}

void citire() {
    int u, v;

    f >> n >> m;
    f >> s;

    for (int i = 0; i < m; ++i) {
        f >> u >> v;
        if (u != v) {
            adj[u].push_back(v);
        }
    }
}

void afisare_lista() {
    for (int i = 1; i <= n; ++i) {
        for (int j = 0; j < adj[i].size(); ++j) {
            g << adj[i][j]<< ' ';
        }
        g << '\n';
    }
}