Cod sursa(job #2194151)

Utilizator BogdanAlexandruBogdan-Alexandru Dig BogdanAlexandru Data 12 aprilie 2018 14:51:02
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include <stdio.h>
#include <queue>
#include <climits>
using namespace std;
FILE *f,*g;
int start[100010],t[1][1000010];
short int viz[100010];
queue<int> coada;
int drum[100010];
void FA_VECTOR(int n)
{
    int i;
    for(i=1;i<=n;i++)
        drum[i]=INT_MAX;
}
void BFS(int s)
{
    coada.push(s);
    int nod,vec,mm,drm;
    drum[s]=0;
    while(!coada.empty())
    {
        nod=coada.front();
        coada.pop();
        mm=start[nod];
        drm=drum[nod];
        viz[nod]=1;
        while(mm)
        {
            if(drm+1<drum[t[0][mm]]||!viz[t[0][mm]])
                coada.push(t[0][mm]),drum[t[0][mm]]=drum[nod]+1,viz[t[0][mm]]=1;
            mm=t[1][mm];
        }
    }
}
void Afisare(int n)
{
    int i;
    for(i=1;i<=n;i++)
        if(drum[i]==INT_MAX)
            fprintf(g,"-1 ");
        else
            fprintf(g,"%d ",drum[i]);

}
int main()
{
    f=fopen("bfs.in","r");g=fopen("bfs.out","w");
    int n,m,i,s,x,y,k=0;
    fscanf(f,"%d %d %d\n",&n,&m,&s);
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d %d",&x,&y);
        t[0][i]=y;
        t[1][i]=start[x];
        start[x]=i;
    }
  /*fprintf(g,"START ={ ");
    for(i=1;i<n;i++)
        fprintf(g,"%d,",start[i]);
    fprintf(g,"%d }\n",start[n]);
    fprintf(g,"T[0]  ={ ");
    for(i=1;i<m;i++)
        fprintf(g,"%d,",t[0][i]);
    fprintf(g,"%d }\n",t[0][m]);
    fprintf(g,"T[1]  ={ ");
    for(i=1;i<m;i++)
        fprintf(g,"%d,",t[1][i]);
    fprintf(g,"%d }",t[1][i]);*/
    FA_VECTOR(n);
    BFS(s);
    Afisare(n);
    fclose(f),fclose(g);
    return 0;
}