Cod sursa(job #1193122)

Utilizator c0rn1Goran Cornel c0rn1 Data 30 mai 2014 23:28:19
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#include <bitset>
#define add push_back

using namespace std;
int n, m, s;
int sol[100005];
vector<int> v[100005];
queue<int> q;
bitset<100005> viz;

void Citire()
{
   int i, x, y;
   scanf("%d %d %d", &n, &m, &s);
   for (i=0; i<m; i++)
   {
      scanf("%d %d", &x, &y);
      v[x].add(y);
   }
}

void Solve()
{
   int a;
   vector<int>::iterator i;
   q.push(s);
   while (!q.empty())
   {
      a=q.front();
      q.pop();
      if (!viz[a])
      {
         viz[a]=1;
         for (i=v[a].begin(); i!=v[a].end(); ++i)
            if (!viz[*i])
            {
               sol[*i]=sol[a]+1;
               q.push(*i);
            }
      }
   }
}

void Afisare()
{
   int i;
   for (i=1; i<=n; ++i)
      if (viz[i])
         printf("%d ", sol[i]);
      else
         printf("-1 ");
}

int main()
{
   freopen("bfs.in", "r", stdin);
   freopen("bfs.out", "w", stdout);
   Citire();
   Solve();
   Afisare();
   return 0;
}