Cod sursa(job #2469456)

Utilizator ProBatmanBalint Leonard ProBatman Data 7 octombrie 2019 12:41:56
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;

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

const int CMAX =1e5+15;

queue < int > Q;
vector < int > v[CMAX];

int n , m , S;
int arc1 , arc2 , drum[CMAX];
bool vizitat[CMAX];

void citire()
{
    fin >> n >> m >> S;
    for(int i=0;i<m;i++)
    {
        fin >> arc1 >> arc2;
        if(arc1!=arc2){
            v[arc1-1].push_back(arc2-1);
        }
    }
}

int bfs(int nod_actual,int nod)
{
    int nod_precedent = 0;
    Q.push(nod_actual);
    vizitat[Q.front()] = 1;
    if(nod_actual==nod)return 0;
    else{
        while(!Q.empty())
        {
            for(int i=0;i<v[Q.front()].size();i++)
            {
                if(vizitat[v[Q.front()][i]]==0){
                    int vecin = v[Q.front()][i];
                    vizitat[v[Q.front()][i]] = 1;
                    Q.push(v[Q.front()][i]);
                    drum[vecin] = drum[Q.front()] + 1;
                    if(vecin==nod)
                        return drum[vecin];
                }
            }
            Q.pop();
        }
    }
    return -1;
}

int main()
{
    citire();
    for(int i=0;i<n;i++)
    {
        memset(drum,0,n);
        for(int j=0;j<n;j++)
            vizitat[j] = 0;
        fout << bfs(S-1,i) << " ";
    }
    return 0;
}