Cod sursa(job #1710855)

Utilizator IuliaRisteaRistea Iulia IuliaRistea Data 29 mai 2016 21:14:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <cstring>
#define NMAX 100009
using namespace std;
FILE *f1=fopen("bfs.in","r"),*f2=fopen("bfs.out","w");

struct nod
{
   int inf;
   nod *urm;
}*g[NMAX];
int n,m,s,i,u[NMAX],d[NMAX],c[NMAX];
void adauga(int i,int j)
{
    nod *p;
    p=new nod;
    p->inf=j;
    p->urm=g[i];
    g[i]=p;
}
void bf(int sursa)
{
    nod *p;
    int st,dr,nod;
    memset(u,0,sizeof(u));
    st=dr=1;
    c[st]=sursa;
    u[sursa]=1;
    for(d[sursa]=0;st<=dr;st++)
    {
        nod=c[st];
        for(p=g[nod];p;p=p->urm)
            if(!u[p->inf])
        {
            u[c[++dr]=p->inf]=1;
            d[p->inf]=d[nod]+1;
        }
    }
}
int main()
{

    fscanf(f1,"%d%d%d",&n,&m,&s);
    for(i=1;i<=m;i++){int x,y;fscanf(f1,"%d%d",&x,&y);adauga(x,y);}
    bf(s);
    for(i=1;i<=n;i++)
    if(i!=s&&d[i]==0) fprintf(f2,"-1 ");
    else fprintf(f2,"%d ",d[i]);
    fclose(f1);
    fclose(f2);
    return 0;
}