Cod sursa(job #2194318)

Utilizator NaritaandreiCNAINarita Andrei NaritaandreiCNAI Data 12 aprilie 2018 20:40:27
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <stdio.h>
#include <deque>
#define maxim 2000000000
using namespace std;
FILE *f,*g;
int m,n,s;
int v[100],a[2][100],fr[1000002],drum[];
deque <int> coada;
void citire()
{
    int k=1,i,j;
    fscanf(f, "%d %d %d", &n, &m, &s);
    for(int l=1; l<=m; l++)
    {
        fscanf(f, "%d %d", &i, &j);
        a[0][k]=j;
        a[1][k]=v[i];
        v[i]=k;
        k++;
    }
}
void afisare()
{   int i,x,ok,nr;
    for(i=1;i<=n;i++)
        fr[i]=maxim;
    coada.push_back(s);
    fr[s]=0;
    while(!coada.empty())
    {
        x=coada.front();
        ok=v[x];
        nr=fr[x];
        if(nr==maxim)
            nr=0;
        while(ok)
        {
            if(fr[a[0][ok]]==maxim || nr+1<fr[a[0][ok]])
            {
                coada.push_back(a[0][ok]);
                fr[a[0][ok]]=nr+1;
            }
            ok=a[1][ok];
        }
        coada.pop_front();
    }
    for(i=1;i<=n;i++)
        if(fr[i]!=maxim)
            fprintf(g,"%d ",fr[i]);
        else
            fprintf(g,"-1 ");
}
int main()
{
    f=fopen("bfs.in","r");
    g=fopen("bfs.out","w");
    citire();
    afisare();
    fclose(f);
    fclose(g);
    return 0;
}