Cod sursa(job #2637497)

Utilizator Snake2003lalallalal Snake2003 Data 23 iulie 2020 12:15:14
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

#define Nmax 100005

using namespace std;

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

vector < int > Numere[Nmax];

queue < int > Coada;

int Distanta[Nmax];

void BFS()
{
    int Nod;
    while(!Coada.empty())
    {
        Nod = Coada.front();
        Coada.pop();
        for(unsigned int i = 0; i < Numere[Nod].size(); i ++)
        {
            int Vecin = Numere[Nod][i];
            if(Distanta[Vecin] == -1) //daca nu e nodul de start sau nu a fost acolo
            {
                Coada.push(Vecin);
                Distanta[Vecin] = Distanta[Nod] + 1; //noua distanta e egala cu distanta unde suntem noi + 1
            }
        }
    }
}

void Read()
{
    int nr_Varfuri, nr_Muchii, nod_Start;
    fin >> nr_Varfuri >> nr_Muchii >> nod_Start;
    for(int i = 1; i <= nr_Muchii; i ++)
    {
        int x, y;
        fin >> x >> y;
        Numere[x].push_back(y); //avem doar o singura directie,fiind graf orientat
    }
    for(int i = 1; i <= nr_Varfuri; i ++)
        Distanta[i] = -1; //facem toate distantele nodurilor -1
    Distanta[nod_Start] = 0;
    Coada.push(nod_Start); //!Coada.empty() pentru ca bagam nodul de start

    BFS();

    for(int i = 1; i <= nr_Varfuri; i ++)
        fout << Distanta[i] << " ";
}

int main()
{
    Read();
    return 0;
}