Cod sursa(job #2785842)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 19 octombrie 2021 17:52:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

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

const int MAXN = 100000;
int n, root;

struct nod{
  vector<int> next;
  int dis;
};

nod noduri[MAXN + 1];

void read_graph(){
  int m, i, x, y;
  in>>n>>m>>root;

  for( i = 0; i < m; i++ ){
    in>>x>>y;
    noduri[x].next.push_back(y);
  }

  /*for( i = 0; i < n; i++ ){
    out<<"numar nod: "<<i + 1<<" ";
    for( int j = 0; j < noduri[i].next.size(); j++ )
      out<<noduri[i].next[j] + 1<<" ";
    out<<'\n';
  }*/
}

queue <int> q;
//vector<int> dis;

void bfs(int root){
  int i, j;

  for( i = 1; i <= n; i++ )
    noduri[i].dis = -1;

  q.push(root);
  noduri[root].dis = 0;
  while( !q.empty() ){

    i = q.front();

    for( j = 0; j < noduri[i].next.size(); j++ ){
      if( noduri[noduri[i].next[j]].dis == -1 ){
        noduri[noduri[i].next[j]].dis  = noduri[i].dis + 1;
        q.push(noduri[i].next[j]);
      }
    }
    q.pop();
  }
}

int main(){
  int i;
  read_graph();

  bfs(root);
  for( i = 1; i <= n; i++){
    out<<noduri[i].dis<<" ";
  }
  return 0;
}