Cod sursa(job #2786881)

Utilizator gabrielanideleaNidelea Gabriela-Andreea gabrielanidelea Data 21 octombrie 2021 20:58:20
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include<fstream>
#include<vector>
#include<queue>

using namespace std;
ifstream f("BFS.in");
ofstream g("BFS.out");

vector<vector<int>>structureaza;

vector<int> vizitat;

void arc(int nod1, int nod2)
{
    structureaza[nod1].push_back(nod2);
}
int parcurgere_in_latime(int nod, int S, int N)
{
    int k = 0, n = N, primul; // contor pt a numara cate noduri trb parcurse din S catre nodul citit
    queue<int>coada;
    coada.push(nod); // adaug x in coada
    for(int i = 0; i < n; i++)
        vizitat[i] = 0;
    vizitat[nod] = 1; // il marchez
    while(!coada.empty())
    {
        primul = coada.front();
        coada.pop();

        for(auto i = structureaza[primul].begin(); i!=structureaza[primul].end(); i++)
            {
                if(!vizitat[*i] && vizitat[S]!=0){ // daca nodul nu a mai fost vizitat
                coada.push(*i); // il adaug in coada
                vizitat[*i] = 1; // apoi il vizitez
                k++;

                }
            }

    }
    if(vizitat[S] == 1)
        return k;
    else
        return -1;


}

int main()
{
    int N, M, S, i, nod1, nod2; // N varfuri, M arce, S start
    f >> N >> M >> S;


    vizitat.assign(N, 0);
    structureaza.assign(N, vector<int>());

    for(i=0; i< M; i++)
    {
        f >> nod1 >> nod2;
        arc(nod1, nod2);
    }
    for(int i = 0; i<N; i++)
        cout<<parcurgere_in_latime(i, S, N);

    return 0;

}