Cod sursa(job #2907426)

Utilizator maria.ianiIani Maria maria.iani Data 30 mai 2022 10:17:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>

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

#define MAX 100001

int N,M,S,x,y,i,j,l;
vector <int> lista_vecini[MAX];
int G[MAX], coada_noduri[MAX], Cost[MAX];

void citire()
{
    f >> N >> M >> S;
    for (i = 1; i <= M; i++)
    {
        f >> x >> y;
        lista_vecini[x].push_back(y);
    }
}

void BFS(int nod)
{
    memset(Cost, -1, sizeof(Cost));

    l = 1;
    Cost[nod] = 0;
    coada_noduri[l] = nod;

    for (i=1; i<=l; i++)
        for (j=0; j < G[coada_noduri[i]]; j++)
            if (Cost[lista_vecini[coada_noduri[i]][j]] == -1)
            {
                // adaug vecinii in coada si calculez costul
                coada_noduri[++l] = lista_vecini[coada_noduri[i]][j];
                Cost[coada_noduri[l]] = Cost[coada_noduri[i]] + 1;
            }
}

int main()
{
    citire();

    for (i=1; i<=N; i++)
        G[i] = lista_vecini[i].size();

    BFS(S);

    for (i=1; i<=N; i++)
        g<<Cost[i]<<" ";

    return 0;
}