Cod sursa(job #905932)

Utilizator lucian666Vasilut Lucian lucian666 Data 6 martie 2013 12:24:39
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb



#include<fstream>
#include<vector>
#include<queue>
#include<bitset>
#include<cstring>


#define NN 100009
#define pb push_back
#define INF 0x3f3f3f3f


const char iname[]="bfs.in";
const char oname[]="bfs.out";

using namespace std;
ofstream out(oname);


int n , d[NN] , m , S;

bitset< NN > uz;

queue<int>Q;

vector<int >G[NN];
typedef vector < int >:: iterator IT;


void read();
void BFS( int );
void write_sol();


int main()
{
    read();
    BFS(S);
    write_sol();

    return 0;
}


void read()
{
    ifstream in(iname);
    in >> n >> m >> S;
    for ( int x,y ; m ;--m)
    {

    in >> x >> y;
    G[x].pb(y);
  //  G[y].pb(x);

    }
}

void BFS(int start)
{
    memset(d,INF,sizeof(d));

    Q.push(start);
    d[start] = 0;
    uz[start] = 1;

    while(!Q.empty() )
    {
        int k = Q.front();
            for ( IT I= G[k].begin(); I!=G[k].end(); ++I )
    if ( !uz[ *I ] )
        {
            uz[*I] = 1;
            d[*I] = d[k]+1;
            Q.push( *I );
        }
    Q.pop();
    }
}


void write_sol()
{
    for( int i=1 ; i<=n ;i++)
        out <<  ( d[i] == INF ? -1 : d[i] ) << " ";


 }