Cod sursa(job #2547259)

Utilizator sipdavSipos David Oliver sipdav Data 15 februarie 2020 10:41:43
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

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

const int dim = 100001;

struct li
{
    int x;
    li* urm = NULL;
};

struct nod
{
    int no, d;
};

int n, m, s, sol[dim];
bool viz[dim];
li* muchii[dim];
nod coada[dim];

void adauga(int x, int y)
{
    li* nou = new li;
    nou->x = y;
    nou->urm = muchii[x];
    muchii[x] = nou;
}

void bfs(int start)
{
    int st = 1, dr = 1;
    nod current;
    current.no = start;
    current.d = 0;
    coada[st] = current;
    viz[start] = 1;

    while(st <= dr)
    {
        current = coada[st++];
        sol[current.no] = current.d;
        for(li* p = muchii[current.no]; p != NULL; p = p->urm)
        {
            if(!viz[p->x])
            {
                dr++;
                coada[dr].no = p->x;
                coada[dr].d = current.d + 1;
                viz[p->x] = 1;
            }
        }
    }
}

void read()
{
    in>>n>>m>>s;
    int x, y;
    for(int i = 1; i <= m; i++)
    {
        in>>x>>y;
        adauga(x, y);
    }
    for(int i = 1; i <= n; i++)
        sol[i] = -1;
}

void solve()
{
    bfs(s);
}

void print()
{
    for(int i = 1; i <= n; i++)
        out<<sol[i]<<' ';
}

int main()
{
    read();
    solve();
    print();
    return 0;
}