Cod sursa(job #3195244)

Utilizator BogdanPPBogdan Protopopescu BogdanPP Data 20 ianuarie 2024 12:22:22
Problema BFS - Parcurgere in latime Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

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

int n, m, s;

class Graph
{
   int V;
   vector<vector<int>> adj;
   vector<int> dist;

public:
   Graph(int V);

   void addEdge(int v, int w);

   void BFS(int s);

   void printDistance();
};

Graph::Graph(int V)
{
   this->V = V;
   adj.resize(V);
   dist.resize(V, -1);
}

void Graph::addEdge(int v, int w)
{
   adj[v].push_back(w);
}

void Graph::BFS(int s)
{
   vector<bool> visited;
   visited.resize(V, false);

   queue<int> q;

   visited[s] = true;
   q.push(s);
   dist[s] = 0;

   while (!q.empty())
   {

      s = q.front();
      q.pop();

      for (auto adjacent : adj[s])
      {
         if (!visited[adjacent])
         {
            visited[adjacent] = true;
            q.push(adjacent);
            dist[adjacent] = dist[s] + 1;
         }
      }
   }
}

void Graph::printDistance()
{
   for (int i = 1; i <= V; i++)
   {
      fout << dist[i] << " ";
   }
}

int main()
{
   int n, m, s;
   fin >> n >> m >> s;
   Graph g(n);

   for (int i = 1; i <= m; i++)
   {
      int v, w;
      fin >> v >> w;
      g.addEdge(v, w);
   }

   g.BFS(s);
   g.printDistance();

   return 0;
}