Cod sursa(job #1554861)

Utilizator antanaAntonia Boca antana Data 21 decembrie 2015 20:56:52
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
#define MAX 100000
#define mu 1000000
using namespace std;
struct nodul{
    int val;
    nodul *next;
};
nodul *v[MAX+1];
int viz[MAX+1];
void adauga(int nod, int vecin)
{
    nodul *aux;
    aux=new nodul;
    aux->val=vecin;
    aux->next=v[nod];
    v[nod]=aux;
}
int coada[mu+1];
void bfs(int nod)
{
    int ic=1, sf=1;
    nodul *aux;
    coada[1]=nod;
    viz[nod]=1;
    aux=v[nod];
    while(ic<=sf)
    {
        aux=v[coada[ic]];
        while(aux!=NULL)
        {
            if(viz[aux->val]==0)
            {
                viz[aux->val]=viz[coada[ic]]+1;
                coada[++sf]=aux->val;
            }
            aux=aux->next;
        }
        ic++;
    }
}
int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    int n, m, i, x, y, s;
    scanf("%d%d%d", &n, &m, &s);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d", &x, &y);
        adauga(x, y);
    }
    bfs(s);
    for(i=1;i<=n;i++)
    {
        if(viz[i]==0&&i!=s)
            printf("-1 ");
        else{
            if(i==s)
                printf("0 ");
            else printf("%d ", viz[i]-1);
        }
    }
    return 0;
}