Cod sursa(job #1061966)

Utilizator SapientiaCHIRILA ADRIAN Sapientia Data 20 decembrie 2013 15:37:17
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>
#include <vector>
#include <queue>
#define Nmax 100001
using namespace std;
int n,s;
int dmin[Nmax];
vector<pair<int,int> >G[Nmax];
vector<pair<int,int> >::iterator it;
queue <int> C;
void citire(int &n,int &s)
{
    int j,m;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d",&n,&m,&s);
    for(j=1;j<=m;++j)
    {
       int x,y;
       scanf("%d %d",&x,&y);
       G[x].push_back(make_pair(y,1));
    }
}
void dfs()
{
    bool viz[Nmax];
    int i,x;
    for(i=1;i<=n;++i) {dmin[i]=0;viz[i]=0;}
    viz[s]=1;
    C.push(s);
    while(!C.empty())
    {
        x=C.front();C.pop();
        for(it=G[x].begin();it!=G[x].end();++it)
         if (!viz[it->first])
         {
            dmin[it->first]=dmin[x]+1;
            viz[it->first]=1;
            C.push(it->first);
         }
    }

}
void afisare()
{
    int i;
    for(i=1;i<=n;++i)
    if (i==s) printf("%d ",0);
    else if (!dmin[i]) printf("%d ",-1);
    else printf("%d ",dmin[i]);
}
int main()
{
    citire(n,s);
    dfs();
    afisare();
    return 0;
}