Cod sursa(job #304170)

Utilizator drag0shSandulescu Dragos drag0sh Data 11 aprilie 2009 09:35:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <vector>
#include <bitset>
#include <queue>

using namespace std;

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

#define maxn 100001
vector <int> a[maxn];
int n,m,s,t[maxn],cost[maxn];

void citire(){
  int x,y,i;
  fscanf(f,"%d%d%d",&n,&m,&s);
  while(m--){
    fscanf(f,"%d%d",&x,&y);
    a[x].push_back(y);
  }
  for(i=1;i<=n;i++)t[i]=a[i].size();
}

bitset<maxn>v;
//queue <int>q;
void bfs(int nod){
  int i,x,fiu;
   queue <int>q;
   while(!q.empty())q.pop();
  
  q.push(nod);
  v[nod]=1;

  while(!q.empty()){
    x=q.front();
    q.pop();
    for(i=0;i<t[x];i++){
      fiu=a[x][i];
      if(!v[fiu]){ 
	cost[fiu]=cost[x]+1;
	q.push(fiu);
	v[fiu]=1;
    }
  }
  }
}


int main(){
  citire();
  bfs(s);
  for(int i=1;i<=n;i++){
    if((cost[i]==0)&&(i!=s))fprintf(g,"-1 ");
    else fprintf(g,"%d ",cost[i]);
  }
  fclose(f);
  fclose(g);
  return 0;
}