Cod sursa(job #2903201)

Utilizator 7MoOdYSbaroi Ionut-Alexandru 7MoOdY Data 17 mai 2022 11:22:53
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <vector>
#include <list>
#include <utility>
#include <queue>
#include <fstream>

using namespace std;

int minEdgeBFS(vector <int> edges[], int u, int v, int n)
{
    vector<bool> visited(n + 10, 0);
    vector<int> distance(n + 10, 0);
    queue <int> Q;
    distance[u] = 0;
    Q.push(u);
    visited[u] = true;
    while (!Q.empty())
    {
        int x = Q.front();
        Q.pop();

        for (int i = 0; i < edges[x].size(); i++)
        {
            if (visited[edges[x][i]])
                continue;
     
            distance[edges[x][i]] = distance[x] + 1;
            Q.push(edges[x][i]);
            visited[edges[x][i]] = true;
        }
    }
    return distance[v];
}

void addEdge(vector <int> edges[], int u, int v)
{
    edges[u].push_back(v);
}
ifstream fin("bfs.in");
ofstream fout("bfs.out");
vector<int> edges[100005];
int main() {
    int N = 0, M = 0, S= 0;
    int x = 0, y = 0;
    fin >> N >> M >> S;
    edges->resize(N);
    
    for (int i = 0; i < M; i++)
    {
        fin >> x >> y;
       addEdge(edges,x, y);
    }
    for (int i = 1; i <= N; i++)
        if (i == S)
            fout << 0 << ' ';
        else if (minEdgeBFS(edges, S, i, N) == 0 && i != S)
            fout << -1 << ' ';
        else 
            fout << minEdgeBFS(edges,S,i,N) << ' ';
}