Cod sursa(job #1648501)

Utilizator AlexanderBFlorin Alexander AlexanderB Data 11 martie 2016 10:30:00
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int a[22000][22001],st[22001],c[22001],n,s,m,x,y,i,i_c,sf_c,t[22001],p;
void citire()
{
    fin>>n>>m>>s;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        a[x][y]=1;
    }
}
void bf_r()
{
    int k;
    while(i_c<=sf_c)
    {
        for(k=1;k<=n;k++)
        {
            if(a[c[i_c]][k]==1 && st[k]==0)
            {
                sf_c++;
                c[sf_c]=k;
                st[k]=1;
                t[k]=c[i_c];

            }
        }
        i_c++;
    }
}
void drum(int i,int &p)
{
    if(t[i] && i!=s)
    {
        drum(t[i],p);
        p++;
    }
}
int main()
{
    citire();
    i_c=sf_c=1;
    c[i_c]=s;
    st[s]=1;
    bf_r();
    for(i=1;i<=n;i++)
        {
            p=0;
            if(i==s)
                fout<<0<<" ";
            else
            {
                drum(i,p);
                if(p==0)
                    fout<<-1<<" ";
                else
                    fout<<p<<" ";
            }
        }
    return 0;
}