Cod sursa(job #995557)

Utilizator vlad96Vlad Zuga vlad96 Data 9 septembrie 2013 13:28:41
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <cstdio>

using namespace std;

#define MAX 100005

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

int n, m, start, t, x, y;
vector <int> v[MAX];
int distanta[MAX], a[MAX], s[MAX];

void bfs (int nod)
{
    int i, j;
    memset(distanta, -1, sizeof(distanta));
    t = 1;
    distanta[nod] = 0;
    s[t] = 0;

    for ( i = 1; i <= t; i ++ )
    {
        for ( j = 0; j < a[ s[i] ]; j ++ )
        {
            if ( distanta [ v[s[i]][j] ] == -1 )
            {
                s[++t] = v[s[i]][j];
                distanta[s[t]] = distanta[s[i]] + 1;
            }
        }
    }
}

int main()
{
    int i;

    f >> n >> m >> start;

    for ( i = 1; i <= m; i ++ )
    {
        f >> x >> y;
        v[x].push_back(y);
    }
    for ( i = 1; i <= n; i ++ )
    {
        a[i] = v[i].size();
    }
    bfs(start);

    for ( i = 1; i <= n; i ++ )
        g << distanta[i] << " ";
    g << '\n';

    f.close();
    g.close();

    return 0;
}