Cod sursa(job #2194128)

Utilizator dobrandreiAndrei Dobra dobrandrei Data 12 aprilie 2018 14:00:10
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <deque>
using namespace std;
FILE *f,*g;

int n,m,s;
int t[2][1000002],start[100002],length[100002];
deque <int> deq;

void ways(){

  int i,j,k=0;
  fscanf(f,"%d %d",&i,&j);

  while(!feof(f)){
    if(i!=j){
      k++;
      t[0][k]=j;
      t[1][k]=start[i];
      start[i]=k;
    }
    fscanf(f,"%d %d",&i,&j);
  }

}

void path(){
  int node,nodex,poz;

  deq.push_back(s);
  while(!deq.empty())
  {
    nodex=deq.front();
    poz=start[nodex];
    start[nodex]=-1;
    node=t[0][poz];
    if(start[node]!=-1){
      deq.push_back(node);
      length[node]=length[nodex]+1;
    }
    while(t[1][poz]){
      poz=t[1][poz];
      node=t[0][poz];
      if(start[node]!=-1){
        deq.push_back(node);
        length[node]=length[nodex]+1;
      }
    }
    deq.pop_front();
  }
}
int main(){

  f=fopen("bfs.in","r");
  g=fopen("bfs.out","w");

  fscanf(f,"%d %d %d",&n,&m,&s);

  ways();

  path();

  for(int i=1;i<=n;i++)
    if(length[i] || i==s)
      fprintf(g,"%d ",length[i]);
    else fprintf(g,"-1 ");
  return 0;
}