Cod sursa(job #389185)

Utilizator newsabbathCaraman Sabina newsabbath Data 1 februarie 2010 11:12:21
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>

using namespace std;


int n,m, mat[1000][1000], s;

void citire()
{
    freopen("bfs.in", "r", stdin);
    scanf("%d%d%d", &n, &m, &s);
    for(int i=1;i<=m;i++)
    {
        int a,b;
        scanf("%d%d", &a, &b);
        mat[a][b] = 1;
    }
}

int bfs(int y)
{
    int p = 0,u =0, nr =0, c[1000], viz[1000];
    c[0] = s;
    viz[s] = 1;
    if(s == y)
        return 0;
    while(p<=u && !viz[y])
    {
        int v = c[p];
        for(int k=1;k<=n;k++)
            if(mat[v][k] == 1 && viz[k] == 0)
            {
                u++;
                c[u] = k;
                viz[k] = 1;
                nr++;
            }
        p++;
    }
    if(nr == 0)
        return -1;
    return nr;
}

void afisare()
{
    freopen("bfs.out", "w", stdout);
    for(int i=1;i<=n;i++)
        printf("%d ", bfs(i));

}
int main()
{
    citire();
    afisare();

    return 0;
}