Cod sursa(job #1468072)

Utilizator Chirita_MateiChirita Matei Chirita_Matei Data 5 august 2015 10:42:16
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 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[10000]={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;

    while(c[1].in!=0)
    {
        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=a;
                    k++;
                    v1[poz]=1;
                }
            }

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

            c[k2+1].pas=0;
            c[k2+1].in=0;
            c[k2+1].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;
}