Cod sursa(job #2558341)

Utilizator richardionelRichard Ionel richardionel Data 26 februarie 2020 15:15:23
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>
using namespace std;

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

const int Nlimita = 100001;
int N ,M ,S;

vector <int> muchii[Nlimita];
queue <int> coada;

int distanta[Nlimita];

void bfs ()
{
    int nodcurent ,vecin;
    while (!coada.empty()) //cat timp nu este goala
    {
        nodcurent = coada.front();
        coada.pop(); //il sterg intrucat deja a fost vizitat

        for (unsigned int i = 0 ;i < muchii[nodcurent].size() ;i++)
        {
            vecin = muchii[nodcurent][i]; //iau vecinii nodului p
            if (distanta[vecin] == -1) //in caz ca nu am luat aceeasi distanta
            {
                coada.push(vecin); //pun in coada vecinu
                distanta[vecin] = distanta[nodcurent] + 1; //logic...
            }
        }
    }

}
void read()
{
    fin >> N >> M >> S;
    for (int i = 1 ;i <= M ;i++)
    {
        int x ,y;
        fin >> x >> y;
        muchii[x].push_back(y); //intrucat este orientat (un sesn pentru fiecare nod)
    }
}

int main()
{
    read();
    for (int i = 1 ;i <= N ;i++)
        distanta[i] = -1;  //initializez toate distantele cu -1
    distanta[S] = 0; //distanta dintre nodul cu el insusi este 0

    coada.push(S);  //incep sa pun in coada nodul si sa fac subprogramul propriu-zis

    bfs();

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