Cod sursa(job #2192251)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 5 aprilie 2018 09:15:30
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define MAXN 100005
#define MAX 10000000

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

class Graph{
private:
    vector<int>v[MAXN];//adicenta
    queue<int>stiva;//coada
    int dp[MAXN],n,sursa;//dinamica
public:
    Graph(int n);
    void add_edge(int nod,int muchie);
    void bfs(int sursa);
    void afis(int n);
};

Graph::Graph(int n){
    this->n = n;
}
void Graph::add_edge(int nod,int muchie){
    v[nod].push_back(muchie);
}
void Graph::afis(int n){
    for(int i = 1; i <= n; i++)
        if(dp[i] == MAX)
            dp[i] = -1;
    for(int i = 1; i <= n; i++)
        out<<dp[i]<<" ";
}
void Graph::bfs(int sursa){
    for(int i = 1; i <= n; i++)
        dp[i] = MAX;
    stiva.push(sursa);
    dp[sursa] = 0;
    while(!stiva.empty()){
        int nod = stiva.front();
        stiva.pop();
        int curent;
        for(int i = 0; i < v[nod].size(); i++){
            curent = v[nod][i];
            if(dp[nod] + 1 < dp[curent]){
                dp[curent] = dp[nod] + 1;
                stiva.push(curent);
            }
        }
    }
}

int main()
{
    int n,m,sursa;
    in>>n>>m>>sursa;
    Graph graf(n);
    for(int i = 1; i <= m; i++){
        int x,y;
        in>>x>>y;
        graf.add_edge(x,y);
    }
    graf.bfs(sursa);
    graf.afis(n);
    return 0;
}