Cod sursa(job #1019769)

Utilizator SapientiaCHIRILA ADRIAN Sapientia Data 31 octombrie 2013 21:41:26
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <cstdio>
#define Nmax 1000
using namespace std;
int a[Nmax][Nmax];
int c[Nmax],d[Nmax];
int i,s,n;
bool viz[Nmax];
void reading(int &n,int &s)
{
    int m;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdin);
    scanf("%d %d %d",&n,&m,&s);
    for(i=1;i<=m;++i)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        ++a[x][0];a[x][a[x][0]]=y;
    }

}
void bfs()
{
    int x,dist=0;
    int prim=0,ultim=0;
    viz[s]=true;
    d[s]=0;
    c[prim]=s;
    while(prim<=ultim)
    {
        x=c[prim++];
        for(i=1;i<=a[x][0];++i)
         if (!viz[a[x][i]])
         {
             d[a[x][i]]=d[x]+1;
             viz[a[x][i]]=1;
             c[++ultim]=a[x][i];
         }
    }
}
int main()
{
    reading(n,s);
    bfs();
    for(i=1;i<=n;++i)
      if (viz[i]) printf("%d ",d[i]);
       else printf("%d ",-1);
    return 0;
}