Cod sursa(job #1774136)

Utilizator raduzxstefanescu radu raduzx Data 8 octombrie 2016 16:57:49
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>

using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
struct nod
{
    int val;
    nod *urm;
};
typedef nod *pnod;
pnod v[100002];
pnod p;
int n;
int ad(int x,int y)
{
    p=v[x]->urm;
    while(p)
    {
        if(p->val==y)
            return 0;
        p=p->urm;
    }
    p=new nod;
    p->urm=v[x]->urm;
    p->val=y;
    v[x]->urm=p;
    return 1;
}
bool a[100002];
int t[100002],k,s,i;
int r[100002];
void dfs(int varf)
{
    k=s=1;
    int sf=1,rand=1;
    t[1]=varf;
    a[varf]=1;
    while(k<=s)
    {
        p=v[t[k]]->urm;
        while(p)
        {
            if(a[p->val]==0)
            {
                a[p->val]=1;
                sf+=1;
                t[sf]=p->val;
                r[p->val]=rand;
            }
            p=p->urm;
        }
        k+=1;
        if(s<k)
        {
            s=sf;
            rand+=1;
        }
    }
}
int main()
{
    int j,x,y,m,inc;
    f>>n;
    f>>m;
    f>>inc;
    for(i=1;i<=n;i++)
    {
        v[i]=new nod;
        v[i]->urm=0;
    }
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        ad(x,y);
    }
    int nr=0;
    dfs(inc);
    for(i=1;i<=n;i++)
        if(r[i]==0)
            r[i]=-1;
    r[inc]=0;
    for(i=1;i<=n;i++)
        g<<r[i]<<" ";
    return 0;
}