Cod sursa(job #1814348)

Utilizator gundorfMoldovan George gundorf Data 23 noiembrie 2016 21:21:24
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#define Nmax 100001
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
struct nod
{
    int info;
    nod *urm;
};
nod *a[Nmax];
int n,m,S,viz[Nmax];
void ADD (int x,nod *&p)
{
    nod *q=new nod;
    q->info=x;
    q->urm=p;
    p=q;
}
void Citire ()
{int x,y,i;
 fin>>n>>m>>S;
 for(i=1;i<=m;i++)
 {
     fin>>x>>y;
     ADD(y,a[x]);

 }
}
int cost[Nmax];
void BFS(int x)
{
    int cl[Nmax],pr,ul,z;
    nod *p;
    viz[x]=1;
    cl[1]=x;
    pr=ul=1;
    cost[x]=0;
    while (pr<=ul)
    {
        z=cl[pr];pr++;
        for (p=a[z];p!=NULL;p=p->urm)
            if (viz[p->info]==0)
        {
            ul++;
            cl[ul]=p->info;
            viz[p->info]=1;
            cost[p->info]=cost[z]+1;
        }

    }
}
int main()
{int i;
nod *p;
    Citire();
    BFS(S);
    for (i=1;i<=n;i++)
        if (viz[i]==0)
        cost[i]=-1;
    for(i=1;i<=n;i++)
        fout<<cost[i]<<" ";
    return 0;
}