Cod sursa(job #632089)

Utilizator Viva12Ferentz Sergiu Viva12 Data 10 noiembrie 2011 12:01:59
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <cstdio>
#include <queue>
#define N 10000
using namespace std;
int n,m,s;
int x,y;
int a[N][N];
struct c
{
    int x;
    int c;
}coada[N];

void citire()
{
    scanf("%d %d %d",&n,&m,&s);
        for(int i=0;i<m;i++)
            {
                scanf("%d %d",&x,&y);
                a[x][y]++;

            }
}
int viz[N];
void bfs()
{   int sf=1;
    int in=1;
    coada[sf++].x=s;
    viz[s]++;
    while(in!=sf)
        {
        for(int i=1;i<=n;i++)
            {
                if(a[coada[in].x][i]!=0&&!viz[i])
                    {
                     coada[sf].x=i;
                     coada[sf++].c+=coada[in].c+1;
                     viz[i]=1;
                    }

            }
        in++;
        }

}
void afis()
{
 for(int i=1;i<=n;i++)
        {int ok=0;
         for(int j=1;j<=n;j++)
                {
                    if(coada[j].x==i)
                        {
                            printf("%d ",coada[j].c);
                            ok=1;
                            break;
                        }
                }
            if(ok==0)
            printf("-1 ");
        }
}
int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    citire();
    bfs();
    afis();
    return 0;
}