Cod sursa(job #2217562)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 30 iunie 2018 21:14:56
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;

#define maxn 100010

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

int N, M, Start, Cost[maxn];
vector<int> A[maxn];
queue<int> coada;
bool viz[maxn];


void BFS(int start)
{
  viz[start]= true;

  // Setam toate costurile la -1
  memset(Cost,-1,sizeof(Cost));

  Cost[Start]=0;
  coada.push(Start);
  while(!coada.empty())
  {
    int parinte = coada.front();
    coada.pop();
    for(int i = 0; i< A[parinte].size(); i++)
    {
      if(viz[A[parinte][i]]==false)
      {
        viz[A[parinte][i]] = true;
        coada.push(A[parinte][i]);
        Cost[A[parinte][i]] = Cost[parinte]+1;
      }
    }
  }
}

int main()
{

    // Declarare de variabile
    int i,x,y;

    // Citire si adaugare de vecini la fiecare nod
    fin >> N >> M >> Start;
    for(i = 1; i<= M; ++i)
    {
      fin >> x >> y;
      A[x].push_back(y);
    }


    // Functia care stabileste costul de ajungere la fiecare nod
    BFS(Start);

    // Printarea rezultatului
    for(i = 1; i<= N; i++)
      fout << Cost[i] << " ";
}