Cod sursa(job #804825)

Utilizator zeeboBuzatu Vlad zeebo Data 30 octombrie 2012 15:33:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <string.h>
#include <queue>
using namespace std;

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

queue <int> q;
struct point
{
    int inf;
    point *leg;
};
point *l[100001],*p;
bool sel[100001];
int n,m,s,i,x,y,nr[100001];

void bfs (int x)
{
    point *p;
    int nod;
    memset (sel,false,sizeof(sel));
    memset (nr,-1,sizeof(nr));

    sel[x]=true;
    q.push(x); nr[x]=0;
    while (!q.empty())
    {
       nod=q.front();
       p=new point;p=l[nod];
       while (p)
       {
           if (!sel[p->inf])
           {
               q.push(p->inf);
               sel[p->inf]=true;
               nr[p->inf]=nr[nod]+1;
           }
               p=p->leg;
       }
    q.pop();
    }
}
int main()
{
    f>>n>>m>>s;
    for (i=1;i<=m;i++)
    {
        f>>x>>y;
        p=new point;
        p->inf=y;
        p->leg=l[x];
        l[x]=p;
    }
bfs(s);
for (i=1;i<=n;i++)
    g<<nr[i]<<' ';
return 0;
}