Cod sursa(job #2957507)

Utilizator stefan05Vasilache Stefan stefan05 Data 22 decembrie 2022 19:01:05
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>

#define NMAX 100005

using namespace std;

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

int c[NMAX];
int inc, sf;

int n, m, s;
int x, y;
int f[NMAX], v[NMAX];
vector<int> mat[NMAX];
vector<int>::iterator it;
int i;

void bfs(int);

int main()
{
    fin >>n>>m>>s;
    for (i = 1; i <= m; ++i)
    {
        fin >>x>>y;
        mat[x].push_back(y);
    }

    bfs(s);

    for (i = 1; i <= n; ++i)
        if (v[i] > 0) fout <<v[i]<<' ';
        else
            if (i == s) fout <<0<<' ';
            else fout <<-1<<' ';
    fout.close();
    return 0;
}

void bfs(int nod)
{
    inc = 0; sf = -1;
    c[++sf] = nod; f[nod] = 1;
    while (inc <= sf)
    {
        nod = c[inc++];
        for (it = mat[nod].begin(); it != mat[nod].end(); ++it)
            if (!f[*it])
            {
                f[*it] = 1;
                v[*it] = v[nod] + 1;
                c[++sf] = *it;
            }
    }
}