Cod sursa(job #1349544)

Utilizator XeBluePodaru Mihai XeBlue Data 20 februarie 2015 12:03:26
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <queue>
#include <cstring>

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

#define N 100001

struct graf{
    int nod;
    graf *next;} *A[N];

int n, m, a, b, S, cost[N], viz[N];
queue <int> q;

void add(int a, int b)
{
    graf *p = new graf;
    p -> nod = b;
    p -> next = A[a];
    A[a] = p;
}

void citire()
{
    in >> n >> m >> S;

    for(int i=1;i<=m;i++)
        in >> a >> b, add(a,b);

    memset(cost, -1, sizeof(cost));
}

void bfs()
{
    cost[S] = 0;
    q.push(S);
    while(!q.empty())
    {
        graf *p = A[q.front()];
        int x = cost[q.front()];
        q.pop();
        for(graf *i=p; i!=NULL; i = i -> next)
        {
            if(cost[i->nod] == -1)
            {
                cost[i->nod] = x + 1;
                q.push(i->nod);
            }
        }
    }
}

void afisare()
{
    for(int i=1; i<=n; i++)
        out << cost[i] << " ";
}


int main()
{
    citire();
    bfs();
    afisare();

    in.close();
    out.close();
    return 0;
}