Cod sursa(job #2635619)

Utilizator PMAorBANPurcaras Paul-Vasile PMAorBAN Data 15 iulie 2020 08:00:17
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.7 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;

int const maxSize = 1000002;

ifstream fin;
ofstream fout;

queue<int>que;
vector<int>adjacency[maxSize];

int visited[maxSize], N, M,S,nr_arce_parcurse;

void citire()
{
    fin >> N >> M >> S;
    for (int i = 1; i <= M; i++)
    {
        int x, y;
        fin >> x >> y;
        adjacency[x].push_back(y);
    }
}

void reset_vizita()
{
    for (int i = 1;i <= N;i++)
        visited[i] = 0;
    while (!que.empty())
        que.pop();
}

void BFS(int S,int nod_cautat)
{
    if (S == nod_cautat)
    {
        nr_arce_parcurse = 0;
        return;
    }
    reset_vizita();
    visited[S] = 1;
    que.push(S);
    while (!que.empty())
    {
        int node = que.front();
        que.pop();
        for (int i = 0; i < adjacency[node].size(); i++)
            if (!visited[adjacency[node][i]])
                if (adjacency[node][i] == nod_cautat)
                {
                    nr_arce_parcurse++;
                    if (S != node)
                        BFS(S, node);
                    return;
                }
                else
                {
                    que.push(adjacency[node][i]);
                    visited[adjacency[node][i]] = 1;
                }
    }
    nr_arce_parcurse = 0;
}

int main()
{
    fin.open("bfs.in");
    fout.open("bfs.out");
    citire();
    for (int i = 1;i <= N;i++)
    {
        BFS(S, i);
        if (nr_arce_parcurse == 0&&S!=i)
            fout << nr_arce_parcurse - 1 << " ";
        else fout << nr_arce_parcurse << " ";
        nr_arce_parcurse = 0;
    }
    fin.close();
    fout.close();
    return 0;
}