Cod sursa(job #2205171)

Utilizator dianamariaDiana Cataros dianamaria Data 18 mai 2018 09:59:08
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream in ("bfs.in");
ofstream out ("bfs.out");
const int N=100002;
int vf[N*2],lst[N*2],urm[N*2],d[N],nr,n,m,s;
bool viz[N];
queue <int> q;
void adauga(int x,int y)
{
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}

void bfs()
{
    q.push(s);
    //viz[s]=1;
    while (!q.empty())
    {
        int st=q.front();
        int p=lst[st];
        if (d[st]==-1)
            d[st]=0;
        //viz[st]=1;
        while(p)
        {
            int y=vf[p];
            if (d[y] == -1)
            {
                d[y]=d[st]+1;
                q.push(y);
            }
            p=urm[p];
        }
        q.pop();
    }
}

int main()
{
    in>>n>>m>>s;
    for (int i=1;i<=m;i++)
    {
        int x,y;
        in>>x>>y;
        adauga(x,y);
    }
    for (int i=1;i<=n;i++)
        d[i]=-1;
    bfs();
    for (int i=1;i<=n;i++)
        out<<d[i]<<" ";
    return 0;
}