Cod sursa(job #1112628)

Utilizator a96tudorAvram Tudor a96tudor Data 19 februarie 2014 21:46:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<cstdio>
#include<vector>
#include<queue>
#define N_MAX 100010
using namespace std;
queue < int > Q;
vector <int> G[N_MAX];
int D[N_MAX],N,S;
bool use[N_MAX];
inline void BFS()
{
    if (Q.empty()) return;
    int Nod=Q.front();
    use[Nod]=true;Q.pop();
    for (vector <int> :: iterator it=G[Nod].begin();it!=G[Nod].end();++it)
        if (!use[*it]) { Q.push(*it); use[*it]=true; D[*it]=D[Nod]+1;}

    BFS();
}
inline void Load_Data(int &N,int &S)
{
    int M,x,y;
    scanf("%d%d%d",&N,&M,&S); Q.push(S); use[S]=true;
    for (int i=1;i<=M;++i) {scanf("%d%d",&x,&y); G[x].push_back(y);}
    for (int i=1;i<=N;++i) {D[i]=0;use[i]=false;}
}
int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    Load_Data(N,S);
    BFS();
    for (int i=1;i<=N;++i)
    {
        if (D[i]!=0 || i==S) printf("%d ",D[i]);
                else printf("-1 ");
    }
    printf("\n");
    fclose(stdin); fclose(stdout);
    return 0;
}