Cod sursa(job #631762)

Utilizator gherghe94Andrei Gherghelau gherghe94 Data 9 noiembrie 2011 18:58:37
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <cstdio>
#include <cstring>
#define smeu 100003
using namespace std;
int N,M,S;
int c[smeu];
int a[10000][10000];
int viz[smeu];
/*
2 ≤ N ≤ 100 000
1 ≤ M ≤ 1 000 000
Daca nu se poate ajunge din nodul S la nodul i, atunci numarul corespunzator numarului i va fi -1.
*/
void citire()
{
    freopen("bfs.in","r",stdin);
    scanf("%d %d %d",&N,&M,&S);
    for(int i=1;i<=M;++i)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        a[x][y]=1;
    }
}
void golire(int x[])
{
    for(int i=0;i<=100000; ++i)
        x[i]=0;
}
void afisare()
{
    for(int i=1;i<=N;++i)
    {
        for(int j=1;j<=N;++j)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
int latime(int vf,int x)
{

    int nr=0;
    c[0]=vf;
    viz[vf]=1;
    int u=1;
    if(vf == x)
        return 0;
    for(int p=0;p<u;++p)
    {
        for(int j=x;j<=N;++j)
        {
            if(a[c[p]][j]==1 && !viz[j])
            {
                c[u++]=j;
                viz[j]=1;
                nr++;
                if(x == j)
                    return nr;
            }
        }
    }
    return -1;
}
void alt_ceva()
{
    for(int i=1;i<=N; ++i)
    {
        golire(viz);
        printf("%d ",latime(S,i));
    }
    printf("\n");
}
int main()
{
    freopen("bfs.out","w",stdout);
    citire();
    //afisare();
    alt_ceva();
    return 0;
}