Cod sursa(job #1246292)

Utilizator danyro364Savu Ioan Daniel danyro364 Data 20 octombrie 2014 21:49:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>
#include <queue>
#include <vector>
#define nmax 100001
using namespace std;
FILE *f=fopen("bfs.in","r"),*g=fopen("bfs.out","w");
struct da{
int n,p;};
vector <long> l[nmax];
queue <da> c;
long r[nmax];
int main()
{
    long s,i,j,x,y,n,m;
    da aux,k;
    fscanf(f,"%ld %ld %ld",&n,&m,&s);
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%ld %ld",&x,&y);
        l[x].push_back(y);
    }
    fclose(f);
    aux.n=s; aux.p=0;
    c.push(aux);
    while(c.size())
    {
        k=c.front();
        c.pop();
        for(i=0;i<l[k.n].size();i++)
            if((!r[l[k.n][i]]&&l[k.n][i]!=s)||r[l[k.n][i]]>k.p+1)
            {
                aux.p=k.p+1;
                r[l[k.n][i]]=k.p+1;
                aux.n=l[k.n][i];
                c.push(aux);
            }
    }
    for(i=1;i<=n;i++)
    if(i!=s&&!r[i])
        fprintf(g,"-1 ");
    else
        fprintf(g,"%ld ",r[i]);
    fclose(g);
    return 0;
}