Cod sursa(job #875018)

Utilizator FayedStratulat Alexandru Fayed Data 9 februarie 2013 16:28:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <stdlib.h>
using namespace std;

int n,m,pr,ul,start;
int * A[100001];
int vizitat[100001];
int q[100001],cost[100001];

void citire(){

    freopen("bfs.in","r",stdin);
    fscanf(stdin,"%d%d%d",&n,&m,&start);
    int x,y;
    for(int i=1;i<=n;i++){

        A[i] = (int *)realloc(A[i],sizeof(int));
        A[i][0] = 0;
    }

for(int i=1;i<=m;i++){

    fscanf(stdin,"%d%d", &x ,&y);
    A[x][0]++;
    A[x] = (int *)realloc(A[x],(A[x][0]+1)*sizeof(int));
    A[x][A[x][0]] = y;
}
fclose(stdin);
}

void BFS(int nod){

    vizitat[nod] = 1;
    q[0] = nod;
    cost[nod] = 0;
        while(pr<=ul){

            nod = q[pr++];
            for(int i=1;i<=A[nod][0];i++)
                if(!vizitat[A[nod][i]]){

                    vizitat[A[nod][i]] = 1;
                    q[++ul] = A[nod][i];
                    cost[A[nod][i]] = cost[nod]+1;
            }
         }
     }

void afisare(){

     freopen("bfs.out","w",stdout);

    for(int i=1;i<=n;i++)
            fprintf(stdout,"%d ", cost[i]);
}

int main(){

    citire();
    for(int i=1;i<=n;i++)
    cost[i] = -1;
    BFS(start);
    afisare();

fclose(stdout);
return 0;
}