Cod sursa(job #530332)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 7 februarie 2011 16:16:56
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <math.h>
#define N 100005

using namespace std;

struct Nod {
    int v;
    Nod* next;
};

int n;
int que[N];
int viz[N];
int wh[N];
int printV[N];
int m;
int s;
int x,y;
Nod *gr[N];

void insert(Nod *&p, int vl) {
    Nod* op = new Nod();
    op->next = p;
    op->v = vl;
    p = op;
}
int bfs(int m) {
    viz[s] = 1;
    int h = 1;
    int t = 1;
    que[h] = m;
    while (h <= t) {
        for(Nod*it = gr[que[h]]; it != 0; it = it -> next)
         if (!viz[it->v]) {
            que[++t] = it->v;
            wh[t] = wh[h] + 1;
            viz[it->v]++;
         }
         h++;
    }
    for(int i = 1; i <= n; i++)
     printV[i] = -1;
    for(int i = 1; i <= t; i++)
     printV[que[i]] = wh[i];
    for(int i = 1; i <= n; i++)
     printf("%d ",printV[i]);


}
int main() {
    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",&x,&y);
       insert(gr[x],y);
    }
    bfs(s);

}