Cod sursa(job #630483)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 5 noiembrie 2011 17:11:31
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 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);
  deque<int>::iterator cd=coada.begin();
  
  while (coada.size())
  {
    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;
      }
    coada.pop_front();
    cd=coada.begin();
  }
}

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;
}