Cod sursa(job #2954155)

Utilizator unomMirel Costel unom Data 13 decembrie 2022 12:50:52
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");
int n, m, start;
vector<int> v[100001];
int l;
int cost[100001];

void bfs(int nod)
{

    vector<bool> visited(100001, false);
    vector<int> q;
    q.push_back(nod);

    visited[start] = true;

    int vis;
    l = 0;
    while(!q.empty())
    {
        vis = q[0];
        //g<<vis<<" ";
        q.erase(q.begin());


        l++;
        int ok = 0;
        for(auto i : v[vis])
        {
            if(!visited[i])
            {
                ok = 1;
                q.push_back(i);
                visited[i] = true;
                cost[i] = l;
            }
        }
        if(ok == 0)
        {
            l--;
        }
    }

}


int main()
{
    int x, y;
    f>>n>>m>>start;

    for(int i = 0; i<m; i++)
    {
        f>>x>>y;
        v[x].push_back(y);
    }

    bfs(start);


    for(int i = 1; i<=n; i++)
    {
        if(cost[i] == 0 && i != start)
        {
            g<<-1<<" ";
        }
        else
        {
            g<<cost[i]<<" ";
        }

    }
    return 0;
}