Cod sursa(job #764421)

Utilizator mi5humihai draghici mi5hu Data 5 iulie 2012 10:59:32
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;

int n, m, s;
vector<int> edges[100020];
bool parcurs[100020];
int dist[100020];

void citeste() {
     int sursa, dest;
     scanf("%d%d%d", &n, &m, &s);
     for (int i = 0; i < m; i++) {
         scanf("%d%d", &sursa, &dest);
         edges[sursa].push_back(dest);
     }     
}

void bfs() {
     queue<int> toBeProc;     
     vector<int>::iterator it;
     
     std::fill(dist, dist + 100010, -1);
     dist[s] = 0;
     toBeProc.push(s);
     parcurs[s] = true;     
          
     while (!toBeProc.empty()) {
           int el = toBeProc.front();
           toBeProc.pop();
           for (it = edges[el].begin(); it != edges[el].end(); it++) {
                if (!parcurs[*it]){
                   dist[*it] = dist[el] + 1;
                   toBeProc.push(*it);
                   parcurs[*it] = true;   
                }
           }      
     }    
}

void afisare() {
     for (int i = 1; i <= n; i++) {
         printf("%d ", dist[i]);
     }     
}

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
        
    citeste();
    bfs();
    afisare();
    
    return 0;
}