Cod sursa(job #1336032)

Utilizator Arodoet96Teodora Stoleru Arodoet96 Data 6 februarie 2015 13:54:03
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <cstdio>
#include <vector>
#define DMAX 100004

using namespace std;

FILE*fin=fopen("bfs.in", "r");
FILE*fout=fopen("bfs.out", "w");

struct coada
{
    int vf, dist;
};

int n, m, s;
vector <int> A[DMAX];
vector <coada> C;
int distanta[DMAX];

void citire();
void BFS();
void afisare();

int main()
{
    citire();
    BFS();
    afisare();
    return 0;
}

void citire()
{
    int i, x, y;
    fscanf(fin, "%d %d %d\n", &n, &m, &s);
    for(i=1;i<=m;++i)
    {
        fscanf(fin, "%d %d", &x, &y);
        A[x].push_back(y);
    }
}

void BFS()
{
    coada aux, aux2;
    int prim, ultim, vecini, i;

    aux.vf=s; aux.dist=0; distanta[s]=-5;
    C.push_back(aux);
    prim=ultim=0;

    while(prim<=ultim)
    {
        aux=C[prim++];
        vecini=A[aux.vf].size();

        for(i=0;i<vecini;++i)
            if(!distanta[A[aux.vf][i]])
            {
                aux2.vf=A[aux.vf][i];
                aux2.dist=aux.dist+1;
                distanta[aux2.vf]=aux2.dist;

                C.push_back(aux2);
                ++ultim;
            }
    }

    distanta[s]=0;
}

void afisare()
{
    int i;
    for(i=1;i<=n;++i)
        if(!distanta[i] && i!=s) fprintf(fout, "-1 ");
            else fprintf(fout, "%d ", distanta[i]);
}