Cod sursa(job #880050)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 16 februarie 2013 10:53:28
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");

#define Nmax 100005
struct elem{
int inf;
elem *adr;
}*v[Nmax];
int n,m,viz[Nmax],s,dist,d[Nmax];
void citesc()
{
    int x,y;
    elem *p;
    f>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y;
        p=new elem;
        p->inf=y;
        p->adr=v[x];
        v[x]=p;
    }
}

void bfs(int x){
    //cout<<x;
    dist++;
    for(elem *p=v[x];p!=NULL;p=p->adr){
        if(d[p->inf]==0){
            if(p->inf==s)
                d[s]=0;
            else
            d[p->inf]=dist;
        }
    }

    for(elem *p=v[x];p!=NULL;p=p->adr){
        if(d[p->inf]==dist){
            bfs(p->inf);
        }
    }
}

/*void afis()
{
    for(int i=1;i<=n;i++)
        {
            for(elem *p=v[i];p!=NULL;p=p->adr)
                cout<<p->inf<<' ';
            cout<<'\n';
        }
}*/

void afis(){
    for(int i=1;i<=n;i++)
        if(d[i]==0 && i!=s)
            g<<-1<<" ";
        else
            g<<d[i]<<" ";
}

int main()
{
    citesc();
    bfs(s);
    afis();
    return 0;
}