Cod sursa(job #2966990)

Utilizator Daniel7390Popescu Daniel Daniel7390 Data 18 ianuarie 2023 20:51:39
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>


using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");

void bf(int N, int M, int S, vector<vector<int>>& liste, vector<int>& vizitat, vector<int>& distante, int distanta)
{
    queue<int> coada;
    coada.push(S);
    vizitat[S] = 1;
    distante[S] = distanta;
    while (coada.size() != 0)
        {
            int i = coada.front();
            coada.pop();
            int exista_vecini = 0;
            for(auto& a:liste[i])
                if (vizitat[a] == 0)
                    exista_vecini = 1;
            if(exista_vecini == 0)
                distanta += 1;
            for(auto& a: liste[i])
            {
                if (vizitat[a] == 0)
                {
                    coada.push(a);
                    vizitat[a] = 1;
                    distante[a] = distanta +1;

                }

            }


        }

}

int main()
{
    int N, M, S;
    vector<vector<int>> liste;
    vector<int> vizitat;
    vector<int> distante;
    fin>>N>>M>>S;
    liste.resize(N + 1);
    vizitat.resize(N + 1);
    distante.resize(N + 1);
    int distanta = 0;

    for (int i = 1; i <= M; i++)
    {
        int x, y;
        fin>>x>>y;
        liste[x].push_back(y);
    }

    for (int i = 1; i <= N; i++)
        distante[i] = -1;

    bf(N, M, S, liste, vizitat, distante, distanta);

    for(int i = 1; i <= N; i++)
        fout<<distante[i]<<" ";

    return 0;
}