Cod sursa(job #2739183)

Utilizator dancu_mihai13Dancu Mihai dancu_mihai13 Data 7 aprilie 2021 01:11:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

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

const int NMAX = 100005;

vector < vector < int > > lista(NMAX);
bool vizitat[NMAX];
int N, M, X, dist[NMAX];

void init()
{
    for(int i = 1; i <= N; i++)
        dist[i] = -1;
}

void BFS(int nod)
{
    int coada[NMAX] = {0};
    vizitat[nod] = true;
    dist[nod] = 0;
    coada[1] = nod;
    int pr = 1, ul = 1;
    
    while(pr <= ul)
    {
        int node = coada[pr];
        for(unsigned int i = 0; i < lista[node].size(); i++)
        {
            if(!vizitat[lista[node][i]])
            {
                vizitat[lista[node][i]] = true;
                coada[++ul] = lista[node][i];
                dist[lista[node][i]] = dist[node] + 1;
            }
        }
        pr++;
    }
    
    for(int i = 1; i <= N; i++)
        fout << dist[i] << ' ';
}

int main()
{
    fin >> N >> M >> X; int x, y;
    init();
    for(int i = 0; i < M; i++)
    {
        fin >> x >> y;
        lista[x].push_back(y);
    }
    
    BFS(X);
    fin.close();
    fout.close();
    return 0;
}