Cod sursa(job #1142136)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 13 martie 2014 15:45:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <vector>
#include <cstring>
#define pb push_back

using namespace std;

vector <int> g[100010];
bool sel[100010];
vector <int> :: iterator it;
int n,i,m,s,t[100010],lg[100010],q[100010],x,y;

void load()
 {
     scanf("%d %d %d", &n, &m, &s);
     for (i=1;i<=m;++i)
      {
          scanf("%d %d", &x, &y);
          g[x].pb(y);
      }
 }

void bfs(int pl)
 {
     sel[pl]=true; int u,p=u=1; q[1]=pl;
     t[pl]=lg[pl]=0;
     while (p<=n)
      {
          x=q[p];
          for (it=g[x].begin(); it!=g[x].end(); it++)
           if (!sel[*it])
            {
                q[++u]=*it;
                sel[*it]=true;
                t[*it]=x; lg[*it]=lg[x]+1;
            }
            p++;
      }
 }

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);


    load();
    memset(lg,-1,sizeof(lg));

    bfs(s);

    for (i=1;i<=n;++i) printf("%d ", lg[i]);

    return 0;
}