Cod sursa(job #751105)

Utilizator padreatiAurelian Tutuianu padreati Data 24 mai 2012 13:03:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stack>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <string.h>

using namespace std;

void sol();

int main() {
#ifdef PADREATI
    freopen("in.txt", "r", stdin);
#else
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
#endif
    sol();
    return 0;
}

#define llu unsigned long long

#define N 100000
#define MAX 2000001

vector<int> G[N];


void sol() {
    int* q = (int*)malloc(N*sizeof(int));
    int* dist = (int*)malloc(N*sizeof(int));

    
    int n, m, s;
    scanf("%d %d %d", &n, &m, &s);

    for (int i = 0; i < n; i++) {
        dist[i] = -1;
    }

    for (int i = 0; i < m; i++) {
        int x, y;
        scanf("%d %d", &x, &y);
        G[x - 1].push_back(y - 1);
    }

    s--;
    dist[s] = 0;
    int start = 0;
    int end = 0;
    q[end++]=s;
    dist[s]=0;
    
    while(start<end) {
        int next = q[start++];
        for(vector<int>::iterator it=G[next].begin(); it!=G[next].end(); it++) {
            int value = *it;
            if(dist[value]!=-1) continue;
            q[end++]=value;
            dist[value]=dist[next]+1;
        }
    }
    for (int i = 0; i < n; i++) {
        printf("%d ", dist[i]);
    }
    printf("\n");

}