Cod sursa(job #1660437)

Utilizator Aavatar36Russu Vadim Aavatar36 Data 23 martie 2016 09:11:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>

std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");


int main() {
    int vertex_count,edge_count,start_vertex;
    fin >> vertex_count>>edge_count>>start_vertex;
    start_vertex--;

    std::vector<int> *graph;

    graph=new std::vector<int>[edge_count];

    for(int i=0; i<edge_count; i++) {
        int a,b;
        fin >> a>>b;
        graph[a-1].push_back(b-1);
    }

    std::queue<int> queue;

    queue.push(start_vertex);

    bool *visited=new bool[vertex_count]();
    int *distance=new int[vertex_count]();
    visited[start_vertex]=true;

    while (!queue.empty()) {
        int current=queue.front();
        queue.pop();
        for(std::vector<int>::iterator it=graph[current].begin(); it!=graph[current].end(); it++) {
            if(!visited[*it]||distance[current]+1<distance[*it]) {
                queue.push(*it);
                visited[*it]=true;
                distance[*it]=distance[current]+1;
            }
        }
    }

    for(int i=0; i<vertex_count; i++) {
        fout<<(visited[i]?distance[i]:-1)<<" ";
    }
    fout<<"\n";
}