Cod sursa(job #1425759)

Utilizator RaileanuCristian Raileanu Raileanu Data 27 aprilie 2015 23:25:28
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include <queue>
#include <string.h>
using namespace std;
ifstream f1("bfs.in");
ofstream f2("bfs.out");
#define MX 100010

queue <int> graf[MX], *C, *Urm;
int n,m, s, dist[MX];

int main()
{
    int i, x,y;
    f1>>n>>m>>s;
    for (i=1; i<=m; i++)
    {
        f1>>x>>y;
        graf[x].push(y);
    }

    memset(dist, -1, sizeof(dist) );
    C= new queue <int>;
    Urm= new queue <int>;

    C->push(s);

    int pas= 0;

    while ( !C->empty() )
    {
        while (!C->empty())
        {
            int x= C->front();
            C->pop();
            dist[x]= pas;

            while ( !graf[x].empty() )
            {
                if ( dist[ graf[x].front() ] == -1 )
                    Urm->push(graf[x].front() );

                graf[x].pop();
            }
        }

        pas++;
        swap(C, Urm);
    }

    for (i=1; i<=n; i++)
        f2<<dist[i]<<" ";
    f2.close();
    return 0;
}