Cod sursa(job #630470)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 5 noiembrie 2011 16:42:52
Problema BFS - Parcurgere in latime Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <deque>
#include <vector>
#define maxn 100001
using namespace std;
int n, m, s, cost[maxn];
deque<int> coada; 
vector<int> vecini[maxn];

void citire()
{
  int a,b;
  scanf("%d %d %d ",&n,&m,&s);
  for (int i=1;i<=m;i++)
  {
    scanf("%d %d ", &a, &b);
  //vecini[a][++vecini[a][0]]=b;
    vecini[a].push_back(b);
  //  vecini[b].push_back(a);
  }
}

void BFS(int node)
{
  for(int i=0;i<=maxn;i++)
    cost[i]=-1;
  cost[node]=0;
  coada.push_back(node);
  
  for (deque<int>::iterator cd=coada.begin(); cd!=coada.end();cd++)
    for(vector<int>::iterator vec=vecini[*cd].begin();vec!=vecini[*cd].end();vec++)
    //for(int j=1; j<=vecini[coada[i]][0];j++)
      if (cost[*vec]<0)
      {
        coada.push_back(*vec);
        cost[*vec]=cost[*cd]+1;
      }
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    citire();
    BFS(s);
    for (int i=1;i<=n;i++)
      printf("%d ", cost[i]);
    return 0;
}