Cod sursa(job #1468080)

Utilizator Chirita_MateiChirita Matei Chirita_Matei Data 5 august 2015 10:57:37
Problema BFS - Parcurgere in latime Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
#include <vector>

using namespace std;
ofstream fout("bfs.out");
ifstream fin("bfs.in");

vector <int> v[100000];

struct coada
{
    int in;
    int sf;
    int pas;
};

int n,m,s,x,y;

int bfs(int x)
{
    int a=0,i,k=0,k1=0,k2=0,poz,j;
    bool v1[100005]= {0};
    coada c[100000]= {0};

    if(x==s)
    {
        return 0;
    }

    for(i=0; i<v[s].size(); i++)
    {
        c[++k].in=s;
        c[k].sf=v[s][i];
        c[k].pas=1;
        v1[s]=1;
    }

    a=1;

    a++;
    k2=k;
    k=0;

    for(i=1; i<=k2;)
    {
        if(c[i].sf==x)
        {
            return c[i].pas;
        }

        poz=c[i].sf;

        if(v1[poz]==0)
        {
            for(j=0; j<v[poz].size(); j++)
            {
                c[k2+1].in=poz;
                c[k2+1].sf=v[poz][j];
                c[k2+1].pas=c[i].pas+1;
                k2++;
                v1[poz]=1;
            }
        }

        for(j=1; j<k2; j++)
        {
            c[j].in=c[j+1].in;
            c[j].sf=c[j+1].sf;
            c[j].pas=c[j+1].pas;
        }

        c[k2].pas=0;
        c[k2].in=0;
        c[k2].sf=0;

        k2--;
    }

    return -1;
}

int main()
{
    fin>>n>>m>>s;

    for(int i=1; i<=m; i++)
    {
        fin>>x>>y;

        v[x].push_back(y);
    }

    for(int i=1; i<=n; i++)
    {
        fout<<bfs(i)<<" ";
    }

    return 0;
}