Cod sursa(job #2063522)

Utilizator herbertoHerbert Mohanu herberto Data 11 noiembrie 2017 11:58:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005

bool seen[MAXN];
vector <int> g[MAXN];
int drum[MAXN];
int q[MAXN];
void bfs(int node){
  int left, right, i;
  left=right=1;
  q[left]=node;
  seen[node]=1;
  while(left<=right){
    node=q[left];
//    printf("%d %d\n", node, drum[node]);
    left++;
    for(i=0; i<g[node].size(); i++)
      if(seen[g[node][i]]==0){
        drum[g[node][i]]=drum[node]+1;
        right++;  q[right]=g[node][i];
        seen[g[node][i]]=1;
      }
  }
}
int main(){
  FILE*fin=fopen("bfs.in", "r");
  FILE*fout=fopen("bfs.out", "w");
  int n, m, s, x, y, i;
  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);
  }
  bfs(s);
  for(i=1; i<=n; i++){
    if(i!=s){
      if(drum[i]!=0)
        fprintf(fout, "%d ", drum[i]);
      else
        fprintf(fout, "-1 ");
    }
    else
      fprintf(fout, "0 ");
  }

  return 0;
}