Cod sursa(job #2143215)

Utilizator SternulStern Cristian Sternul Data 25 februarie 2018 18:03:37
Problema BFS - Parcurgere in latime Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#define NMAX 10000
using namespace std;

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

int l[NMAX][NMAX], C[NMAX], tata[NMAX], niv[NMAX];
int n, m, h, p, u;
bool viz[NMAX];


void citire()
{
    int x,y;
    f>>n>>m>>h;
    for(int i = 1; i <= m;i++)
    {
        f>>x>>y;
        l[x][0]++;
        l[x][l[x][0]] = y;
    }
}

void BFS(int s)
{
    int i, j, k;
    p=1;
    viz[s] = 1;
    C[++u] = s;
    niv[s] = 0;
    while(p<=u)
    {
        i = C[p++];
        //cout<<i<<" ";
        for(int j=1;j<=l[i][0];j++)
        {
            k = l[i][j];
            if(!viz[k])
            {
                viz[k] = 1;
                C[++u] = k;
                tata[k] = i;
                niv[k] = niv[i] + 1;
            }
        }
    }
    //cout<<"\n";
}

int main()
{
    citire();
    BFS(h);
    for(int i = 1;i<=n;i++)
        if(!viz[i])
            niv[i] = -1;
    for(int i=1;i<=n;i++)
        g<<niv[i]<<" ";
}