Cod sursa(job #679694)

Utilizator AplayLazar Laurentiu Aplay Data 13 februarie 2012 17:27:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
#include<stdlib.h>
typedef struct nod{int x; nod *urm; } NODE;
NODE *v[100005];
int n,m,s;
int c[600000];
int viz[100005];

void citire()
{
    FILE*f=fopen("bfs.in","r");
    fscanf(f,"%d%d%d",&n,&m,&s);
    NODE *q;
    int x,y;
    for(int i=1;i<=m;++i)
    {
        fscanf(f,"%d%d",&x,&y);
        q=(NODE*)malloc(sizeof(NODE));
        q->x=y;
        q->urm=v[x];
        v[x]=q;
    }
    fclose(f);
}

void bfs()
{
    int p,u;
    p=u=0;
    c[0]=s;
    NODE *q;
    while(p<=u)
    {
        q=v[c[p]];
        while(q)
        {
            if(!viz[q->x]&&q->x!=s)
            {
                c[++u]=q->x;
                viz[q->x]=viz[c[p]]+1;
            }
            q=q->urm;
        }
        ++p;
    }
}

void scriere()
{
    FILE*f=fopen("bfs.out","w");
    for(int i=1;i<=n;++i)
        if(viz[i]) fprintf(f,"%d ",viz[i]);
        else
            if(i==s) fprintf(f,"0 ");
            else fprintf(f,"-1 ");
    fclose(f);
}

int main()
{
    citire();
    bfs();
    scriere();
    return  0;
}