Cod sursa(job #2029152)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 29 septembrie 2017 16:06:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");
const int N = 100001;

vector<int> a[N];

int n,x0,q[N],d[N];

void citire()
{
    int x, y, m;
    in >> n >> m >> x0;
    for (int i = 0; i < m; i++)
    {
        in >> x >> y;
        a[x].push_back(y);//il adaug pe y in lista de vecini (succesori) ai lui x
    }
    in.close();
}

void BFS()
{
    int st,dr,i,x,y,p=0,u=-1;
    d[x0]=0;
    q[++u]=x0;
    while(p<=u)
    {
        x=q[p++];
        for(size_t i=0; i<a[x].size(); i++)
        {
            y=a[x][i];
            if(d[y]==-1)
            {
                d[y]=1+d[x];
                q[++u]=y;
            }
        }
    }
}
//a[i]-vecinii nodului i
int main()
{
    citire();
    int i;
    for(i=1; i<=n; i++)
        d[i]=-1;
    BFS();
    for(i=1; i<=n; i++)
        out<<d[i]<<" ";
    /*
    //dupa ce l=am scos din coada pe x parcurg vecinii lui
    for (size_t i = 0; i < a[x].size(); i++)
    {
        y = a[x][i];
        if (d[y] == -1)
        {
            d[y] = 1 + d[x];
            q[++u] = y;
        }
    }
    */
    return 0;
}