Cod sursa(job #2632865)

Utilizator anabatAna Batrineanu anabat Data 5 iulie 2020 12:23:03
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>

using namespace std;

#include <vector>
#include <queue>

#define NMAX 100000

vector <int> g[NMAX];
queue <int> q;

int viz[NMAX+1],s,dist[NMAX+1];

void bfs(int nod){
  int i,first;
  viz[s]=1;
  q.push(s);
  while(!q.empty()){
    first=q.front();
    for(auto next : g[first]){
      if(viz[next]==0){
        viz[next]=1;
        dist[next]=dist[first]+1;
        q.push(next);
      }
    }
    q.pop();
  }
}

int main()
{
  FILE *fin,*fout;
  fin=fopen("bfs.in","r");
  fout=fopen("bfs.out","w");

  int n,m,x,y,i,nr,j;
  fscanf(fin,"%d%d%d",&n,&m,&s);
  for(i=1;i<=m;i++){
    fscanf(fin,"%d%d",&x,&y);
    g[x].push_back(y); ///muchii cu liste de adiacenta
  }
  for(i=1;i<=n;i++){
    bfs(i);
    if(dist[i]==0&&i!=s){
      fprintf(fout,"-1 "); ///nu exista conexiune intre S si nod
    }
    else if(i==s){
      fprintf(fout,"0 ");
    }
    else
      fprintf (fout, "%d ", dist[i]);
    for(j=1;j<=n;j++){
      viz[j]=0;
    }
  }

  fclose(fin);
  fclose(fout);
  return 0;
}