Cod sursa(job #1363017)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 26 februarie 2015 17:46:57
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<stdio.h>
#include<list>

bool vizitat[100001];

std::list<int> *l;
std::list<int> q;
std::list<int> cost;
FILE *fin,*fout;
int mi[100001];

void bfs()
{
    if(q.empty())
    {
        return;
    }
    vizitat[q.back()]=1;
    if(mi[q.back()]>cost.back()||mi[q.back()]==0)
    {
        mi[q.back()]=cost.back();
    }
    while(!l[q.back()].empty())
    {
        if(vizitat[l[q.back()].back()]==0)
        {
            q.push_front(l[q.back()].back());
            cost.push_front(cost.back()+1);
        }
        l[q.back()].pop_back();
    }
    q.pop_back();
    cost.pop_back();
    bfs();

}

int main()
{
    fin=fopen("bfs.in","r");
    fout=fopen("bfs.out","w");

    int n,m,s,t1,t2;
    fscanf(fin,"%d %d %d",&n,&m,&s);

    l=new std::list<int>[n+1];

    for(int i=1;i<=m;i++)
    {
        fscanf(fin,"%d %d",&t1,&t2);
        l[t1].push_front(t2);
    }

    cost.push_back(0);
    q.push_front(s);
    bfs();

    for(int i=1;i<=n;i++)
    {
        if(mi[i]==0&&i!=s)
        {
            fprintf(fout,"-1 ");
        }
        else
        {
            fprintf(fout,"%d ",mi[i]);
        }
    }
}