Cod sursa(job #2064010)

Utilizator ruxi.icleanuRuxandra Icleanu ruxi.icleanu Data 11 noiembrie 2017 18:14:12
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>

using namespace std;

#define MAXN 100000

vector <int> g[MAXN+1];
int q[MAXN+1];
char seen[MAXN+1];
int dist[MAXN+1];

void bfs(int node) {
    int first, last, i, l;
    first=last=0;
    q[last++]=node;
    seen[node]=1;
    while(first<last) {
        node=q[first++];
        l=g[node].size();
        for(i=0; i<l; i++)
            if(!seen[g[node][i]]) {
                q[last++]=g[node][i];
                seen[g[node][i]]=1;
                dist[g[node][i]]=dist[node]+1;
            }
    }
}

int main()
{
    int n, m, s, x, y, i;

    FILE *fi = fopen("bfs.in", "r");
    FILE *fo = fopen("bfs.out", "w");

    fscanf(fi, "%d%d%d", &n, &m, &s);
    for(i=0; i<m; i++) {
        fscanf(fi, "%d%d", &x, &y);
        g[x].push_back(y);
    }
    bfs(s);
    for(i=1; i<=n; i++) {
        if(dist[i]==0 && i!=s)
            dist[i]=-1;
        fprintf(fo, "%d ", dist[i]);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}