Cod sursa(job #652880)

Utilizator BugirosRobert Bugiros Data 26 decembrie 2011 18:03:55
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <vector>
using namespace std;

const int MAXN = 100005;
const int INF = 1000000000;

vector<int> vecin[MAXN];
int d[MAXN],coada[MAXN],p,q;
int n,s;

void citire()
{
    int m,a,b;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf ("%d%d%d",&n,&m,&s);
    for (int i = 1;i <= m;++i)
    {
        scanf ("%d%d",&a,&b);
        vecin[a].push_back(b);
    }
}

void initializare_bfs(int sursa)
{
    for (int i = 1;i <= n;++i)
        d[i] = INF;
    d[sursa] = 0;
    coada[1] = sursa;
    p = 1;
    q = 1;
}

void bfs(int sursa)
{
    int nod;
    initializare_bfs(sursa);
    while (p <= q)
    {
        nod = coada[p];
        for (unsigned int i = 0;i < vecin[nod].size();++i)
            if (d[vecin[nod][i]] == INF)
            {
                d[vecin[nod][i]] = d[nod] + 1;
                coada[++q] = vecin[nod][i];
            }
        ++p;
    }
}

void afisare()
{
    for (int i = 1;i <= n;++i)
        printf ("%d ",(d[i] == INF)?-1:d[i]);
}

int main()
{
    citire();
    bfs(s);
    afisare();
    return 0;
}