Cod sursa(job #2784445)

Utilizator Octavian21Chiriac Octavian Octavian21 Data 16 octombrie 2021 14:57:23
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.65 kb
#include <bits/stdc++.h>

using namespace std;


class Graf
{
    int n , m;
    vector <int> drum[100001];

    public:
        Graf(int n, int m, pair <int,int> muhie[]);
        int bfs(int nod, int dest);
};


Graf :: Graf(int n, int m, pair <int,int> muchie[])
{
    this-> n = n;
    this-> m = m;
    for(int i=1; i<=m; ++i)
    {
        drum[ muchie[i].first ].push_back( muchie[i].second );
    }
    //cout<<"da";
}

int Graf :: bfs(int nod, int dest)
{
    if(nod == dest)
        return 0;

    int dist[n];
    bool viz[n];
    deque <int> coada;

    for(int i=1; i<=n; ++i)
    {
        dist[i] = -1;
        viz[i] = false;
    }
    coada. push_back(nod);
    viz[nod] = true;
    dist[nod] = 0;

    while(!coada.empty())
    {
        int p = coada. front();
        for(int i=0; i<drum[p].size(); ++i)
        {
            if(viz[drum[p][i]] == false)
            {
                dist[drum[p][i]] = dist[p] + 1;
                viz[drum[p][i]] == true;
                coada. push_back(drum[p][i]);
                if(drum[p][i] == dest)
                    return dist[drum[p][i]];
            }
        }
        coada.pop_front();
    }
    return -1;
}


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

pair <int,int> muchie[1000001];

int main()
{
    int n,m,nod;
    //pair <int,int> muchie[m];
    fin>>n>>m>>nod;
    for(int i=1;i<=m; ++i)
    {
        fin>> muchie[i].first>>muchie[i].second;

    }
    Graf g(n,m,muchie);
    //cout<<g.bfs(2,2);
    for(int i = 1; i<=n; ++i)
    {
        int rez = g.bfs(nod,i);
        fout<<rez<<" ";
    }
    return 0;
}