Cod sursa(job #228360)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 6 decembrie 2008 23:47:47
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
# include <cstdio>
# include <vector>

using namespace std;

# define FIN "bfs.in"
# define FOUT "bfs.out"
# define MAXN 100005

int N, M, i, a, b, Su, last;
int D[MAXN];
int S[MAXN];
int Coada[MAXN];
vector <int> E[MAXN];
 
    void bf(int nod)
    {
        int i, j, L;
        
        for (i = 1; i <= N; ++i)
          D[i] = -1;
        
        S[nod] = last = 1;
        Coada[1] = nod;
        D[nod] = 0;
        
        for (i = 1; i <= last; ++i)
          {
              L = E[Coada[i]].size();
              
              for (j = 0; j < L; ++j)
                if (!S[E[Coada[i]][j]])
                  {
                      S[E[Coada[i]][j]] = 1;
                      Coada[++last] = E[Coada[i]][j];
                      D[E[Coada[i]][j]] = D[Coada[i]] + 1;
                  }
          }
    }

    int main()
    {
        freopen(FIN,"r",stdin);
        freopen(FOUT,"w",stdout);
        
        scanf("%d%d%d",&N,&M,&Su);
        for (i = 1; i <= M; ++i)
          {
             scanf("%d%d",&a,&b);
             E[a].push_back(b);
          }
        
        bf(Su);
        
        for (i = 1; i <= N; ++i)
          printf("%d ",D[i]);
        
        return 0;
    }