Cod sursa(job #1190919)

Utilizator costyrazvyTudor Costin Razvan costyrazvy Data 25 mai 2014 22:32:42
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <set>
#include <queue>
#include <vector>
#include <climits>

using namespace std;

#define NMAX 100005

queue < int > Q;
set < pair < int ,int > > Muchii;
vector < int > L[NMAX];
int Dist[NMAX];
int S,N,M,i,x,y;

void BFS()
{
    Q.push(S);

    while (!Q.empty())
      {
          for ( vector < int > :: iterator it=L[Q.front()].begin();it!=L[Q.front()].end();++it)
               {
                   set < pair < int ,int > > :: iterator okIt=Muchii.find(make_pair(Q.front(),*it));

                   if (okIt!=Muchii.end()) continue;

                   Muchii.insert(make_pair(Q.front(),*it));

                   Dist[*it]=min(Dist[*it],Dist[Q.front()]+1);

                   Q.push(*it);
               }
          Q.pop();
      }
}

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

    scanf("%d%d%d",&N,&M,&S);

    for (i=1;i<=M;++i)
        {
            scanf("%d%d",&x,&y);

            if (x==y) continue;

            L[x].push_back(y);
        }

    for (i=1;i<=N;++i) Dist[i]=INT_MAX;

    Dist[S]=0;
    BFS();

    for (i=1;i<=N;++i)
       (Dist[i]==INT_MAX) ? printf("-1 ") : printf("%d ",Dist[i]);

    return 0;
}