Cod sursa(job #2170545)

Utilizator benjamin2205Zeic Beniamin benjamin2205 Data 15 martie 2018 08:02:49
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, s;
int matriceAdiac[1005][1005];

queue <int> nodCoada;
queue <int> costCoada;

int vizitati[100005];

void bfs() {
    int nodNou;
    int costNou;

    /// Pun nodul de start in coada, la fel si costul lui
    nodCoada.push(s);
    costCoada.push(0);

    /// Il marchez ca vizitat
    vizitati[s] = -2;

    cout << "a";

    while (!nodCoada.empty()) {
        /// Scot primul nod din coada
        nodNou = nodCoada.front();
        nodCoada.pop();

        /// Scot primul cost din coada
        costNou = costCoada.front();
        costCoada.pop();

        /// Iterand prin toate nodurile
        for (int i = 1; i <= n; ++i) {
            /// Le caut pe cele spre care exista arc pornind de la nodul Curent
            if (matriceAdiac[nodNou][i] ==  1 && vizitati[i] == 0) {
                /// Daca exista, le pun in coada
                nodCoada.push(i);
                /// Pun si costul in coada
                costCoada.push(costNou + 1);
                /// Le marchez si ca vizitate, cu costul lor
                vizitati[i] = costNou + 1;
            }
        }

    }
}

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

int main()
{
    f >> n >> m >> s;

    int prim;
    int secund;

    for (int i = 1; i <= m; ++i) {
        f >> prim;
        f >> secund;

        matriceAdiac[prim][secund] = 1;
    }

    bfs();
    afisare();
    return 0;
}