Cod sursa(job #2785234)

Utilizator MirunaStefaniaLupascu Miruna-Stefania MirunaStefania Data 18 octombrie 2021 11:50:54
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include<fstream>
#include<vector>
#include<queue>
#define N 100005


using namespace std;

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

queue<int> q;
class Graph {
private:
    int n, m;

    vector<int> adlist[N];
    bool viz[N];
    int dist[N];
public:
    void readOriented();
    Graph(int n, int m):n(n), m(m){}
    void bfs(int first);
    void printDist();
    void reseteaza();
};

void Graph::printDist()
{
    int i;
    for(i = 1; i <= n; ++i)
        fout << dist[i] - 1 << " ";
}

void Graph::readOriented()
{
    int i, x, y;
    for(i = 1; i <= m; ++i)
    {
        fin >> x >> y;
        adlist[x].push_back(y);

    }
}
void Graph::bfs(int first){
    int node, i, dim;
    dist[first] = 1;
    viz[first] = 1;
    q.push(first);

    while(!q.empty())
    {
        node = q.front();
        q.pop();
        dim = adlist[node].size();
        for(i = 0; i < dim; ++i)
            if(!viz[adlist[node][i]])
        {
            cout << adlist[node][i] <<" ";
            viz[adlist[node][i]] = 1;
            dist[adlist[node][i]] = dist[node] + 1;
            q.push(adlist[node][i]);
        }
    }
}
void Graph::reseteaza() {
    int i;
    for(i = 1; i <= n; ++i)
    {
        viz[i] = 0;
        dist[i] = 0;
    }
}

int main()
{
    int i, first, n, m;

    fin >> n >> m >> first;
    Graph g(n, m);
    g.reseteaza();
    g.readOriented();
    g.bfs(first);
    g.printDist();

    return 0;
}