Cod sursa(job #1493538)

Utilizator NightSilentIridon Stefan NightSilent Data 29 septembrie 2015 16:35:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");

struct nod
{
    int inf;
    nod *urm;

}*l[100001];
int m,n,t[100001],d[100001],c[100001],tp,start;
int u[100001];


void adaugnod(nod *&p,int x)
    {
        nod *c;
        c=new nod;
        c->inf=x;
        c->urm=p;
        p=c;
    }
void citire()
    {
        int i;
        int x,y;
        f>>n>>m>>start;
        for (i=1;i<=m;i++)
            {
                f>>x>>y;
                adaugnod(l[x],y);
               // adaugnod(l[y],x);
            }
        f.close();
    }
void bf(int start)
    {
        nod *p;
        int inf,st,dr;
        st=dr=1;
        c[st]=start;
        u[start]=1;
        while (st<=dr) //coada nevida
            {
                inf=c[st];
                for (p=l[inf];p;p=p->urm)

                        if (!u[p->inf])
                            {
                                c[++dr]=p->inf;
                                u[p->inf]=1;
                                d[p->inf]=d[inf]+1; //lungimea drumului minim
                                t[p->inf]=inf;  //tATAL
                            }
                st++; //avansez la inceputul cozii

            }
    }
int main()
{
    int i;
    citire();

    bf(start);
    for (i=1;i<=n;i++)
       if (i==start)
        g<<0<<" ";
    else
        if (i!=start && d[i]==0)
            g<<-1<<" ";
    else
        g<<d[i]<<" ";
    return 0;
}