Cod sursa(job #2168208)

Utilizator theodor.vladTheodor Vlad theodor.vlad Data 14 martie 2018 10:02:50
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <queue>
#include <utility>

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

struct node
{
    int x;
    node * next;
};

void bfs(int);
void citire();
void afisare();

int n, m, start;
int d[100005];
bool uz[100005];
node * G[100005];
queue<int> q;

int main()
{
    citire();
    bfs(start);
    afisare();
    return 0;
}

void afisare()
{
    for (int i = 1; i <= n; i++)
    {
        if (i == start)
            fout << 0 << ' ';
        else fout << (d[i] == 0 ? -1 : d[i]) << ' ';
    }
    fout << '\n';
}

void bfs(int start)
{
    q.push(start);
    uz[start] = true;

    while (!q.empty())
    {
        int x = q.front();
        q.pop();

        for (node * p = G[x]; p; p = p->next)
            if (!uz[p->x])
            {
                uz[p->x] = true;
                d[p->x] = d[x] + 1;
                q.push(p->x);
            }
    }
}

void insertNode(node * & list, int x)
{
    node * p = new node;
    p->x = x;
    p->next = list;
    list = p;
}

void citire()
{
    fin >> n >> m >> start;

    int x, y;
    for (int i = 1; i <= m; i++)
    {
        fin >> x >> y;
        insertNode(G[x], y);
    }
}