Cod sursa(job #1830941)

Utilizator stefantagaTaga Stefan stefantaga Data 17 decembrie 2016 11:43:50
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
queue <int> c;
struct nod
{
    int info;
    nod*urm;
}*v[100001];
void adaugare (nod*&prim,int x)
{
    nod*nou;
    nou=new nod;
    nou->info=x;
    nou->urm=NULL;
    if (prim==NULL)
    {
        prim=nou;
    }
    else
    {
        nou->urm=prim;
        prim=nou;
    }
}
int viz[100001];
void bfs(nod*&prim,int i,int yy)
{
    int j,k=0;
    nod*p;
    for (j=1;j<=100001;j++)
    {
        viz[j]=0;
    }if (yy==3)
    {
        k++;
    }
    viz[i]=0;
    c.push(i);
    int ok=0;
    while (c.size()!=0)
    {
            for (p=v[i];p;p=p->urm)
        {
                if (viz[p->info]==0)

            {
                viz[p->info]=viz[i]+1;
                if (p->info==yy)
                {
                    ok=1;break;
                }
                c.push(p->info);
            }
        }
        c.pop();
        i=c.front();
        if (ok==1)
        {
            break;
        }
    }
}
int main()
{
    int n,m,x,z,y,i;
    f>>n>>m>>x;
    for (i=1;i<=m;i++)
    {
        f>>z>>y;
        if (x!=y)
        {
           adaugare (v[z],y);
        }
    }
    for (i=1;i<=n;i++)
    {
        if (x!=i)
        {
            bfs(v[x],x,i);
        }

        if (i==x)
        {
            g<<"0"<<" ";
        }
        else
        {
            if (viz[i]==0)
            {
                g<<"-1"<<" ";
            }
            else
            {
                g<<viz[i]<<" ";
            }
        }
    }
    return 0;
}