Cod sursa(job #3250476)

Utilizator Ioana38Bejenaru Ioana Ioana38 Data 21 octombrie 2024 11:17:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <vector>
#include <queue>
#include <fstream>
using namespace std;

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

void BFS(int s, int n, vector <vector<int>> l, int dist[])
{
   queue <int> coada;
   bool vizitat[n];
   for(int i = 0; i < n; i++)
      vizitat[i] = 0;
   vizitat[s - 1] = 1;
   dist[s - 1] = 0;
   coada.push(s - 1);
   while(!coada.empty())
   {
      int nod = coada.front();
      for(int i = 0; i < l[nod].size(); i++)
         if(vizitat[l[nod][i]] == 0)
         {
            vizitat[l[nod][i]] = 1;
            coada.push(l[nod][i]);
            dist[l[nod][i]] = dist[nod] + 1;
         }
      coada.pop();
   }
}

int main()
{
   //DECLARARE
   int N, M;
   int S;
   //CITIRE
   fin >> N >> M >> S;
   vector <vector<int>> lista_adiacenta(N);
   //CREAREA LISTELOR
   int x, y;
   for(int i = 0; i < M; i++)
   {
      fin >> x >> y;
      if(!(x < 1 || x > N || y < 1 || y > N || y == x))
         lista_adiacenta[x - 1].push_back(y - 1);
   }
   //BFS
   int dist[N];
   for(int i = 0; i < N; i++)
      dist[i] = 0;
   BFS(S, N, lista_adiacenta, dist);
   for(int i = 0; i < N; i++)
      if( i == S - 1)
         fout << 0 << " ";
      else if(dist[i] == 0)
         fout << -1 << " ";
      else fout << dist[i] << " ";
   return 0;
}