Cod sursa(job #676736)

Utilizator cdascaluDascalu Cristian cdascalu Data 9 februarie 2012 16:04:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<stdio.h>
#include<queue>
#include<vector>
#include<bitset>
#define Nmax 100001
#define Max 0x3f3f3f3f
using namespace std;

vector<int> G[Nmax];
int N,M,S,d[Nmax];
bitset<Nmax> viz;
void read()
{
    FILE*f = fopen("bfs.in","r");
    fscanf(f,"%d%d%d",&N,&M,&S);
    int i,x,y;
    for(i=1;i<=M;++i)
    {
        fscanf(f,"%d%d",&x,&y);
        G[x].push_back(y);
    }
    fclose(f);
}
void bfs()
{
    fill(d+1,d+N+1,Max);

    queue<int> Q;
    Q.push(S);

    viz[S]  = true;
    d[S]    = 0;

    vector<int>::iterator it;
    int nod;

    while(!Q.empty())
    {
        nod = Q.front();
        Q.pop();
        for(it = G[nod].begin();it<G[nod].end();++it)
            if(viz[*it]==false)
            {
                viz[*it] = true;
                d[*it] = d[nod]+1;
                Q.push(*it);
            }
    }
}
int main()
{
    read();
    bfs();
    FILE*g = fopen("bfs.out","w");
    int i;
    for(i=1;i<=N;++i)
    {
        if(d[i]==Max)
            d[i] = -1;
        fprintf(g,"%d ",d[i]);
    }
    fclose(g);
    return 0;
}