Cod sursa(job #1821669)

Utilizator PinkiePie1189Preoteasa Mircea-Costin PinkiePie1189 Data 3 decembrie 2016 14:14:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include<stdio.h>
#define MAXN 100001
struct nod
{
    int val;
    nod*next;
};
inline void InitListe(int N);
inline void Adauga(int x,int lista);
inline void bfs(int S);
FILE*fin,*fout;
nod* Lista[MAXN];
int cost[MAXN];
bool seen[MAXN];
int coada[MAXN];
int pr=0,ult=-1;
int main()
{
    fin=fopen("bfs.in","r");
    fout=fopen("bfs.out","w");
    int N,M,S;
    fscanf(fin,"%d%d%d",&N,&M,&S);
    InitListe(N);
    for(int i=1;i<=M;i++)
    {
        int x,y;
        fscanf(fin,"%d%d",&x,&y);
        Adauga(y,x);
    }
    bfs(S);
    for(int i=1;i<=N;i++)
    {
        if(!seen[i])
        {
            fprintf(fout,"-1 ");
        }
        else
        {
            fprintf(fout,"%d ",cost[i]);
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}
inline void Adauga(int x,int lista)
{
    nod*newborn=new nod;
    newborn->val=x;
    newborn->next=Lista[lista]->next;
    Lista[lista]->next=newborn;
}
inline void bfs(int S)
{
    coada[++ult]=S;
    seen[S]=1;
    while(pr<=ult)
    {
        nod* ptr=Lista[coada[pr]];
        while(ptr->next!=NULL)
        {
            if(!seen[ptr->next->val])
            {
                coada[++ult]=ptr->next->val;
                seen[ptr->next->val]=1;
                cost[ptr->next->val]=cost[coada[pr]]+1;
            }
            ptr=ptr->next;
        }
        pr++;
    }
}
inline void InitListe(int N)
{
    for(int i=1;i<=N;i++)
    {
        Lista[i]=new nod;
        Lista[i]->next=NULL;
    }
}