Cod sursa(job #2739553)

Utilizator GligarEsterabadeyan Hadi Gligar Data 8 aprilie 2021 17:31:47
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.76 kb
#include <fstream>

using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

struct vector{
    int *v=nullptr;
    int capacity=0, size=0;

    void push_back(int x);
};

void vector::push_back(int x){
    if(v==nullptr){
        v=new int[1];
        v[0]=x;
        size++;
        capacity=1;
    }else if(capacity==size){
        capacity*=2;
        int *v2=new int[capacity];
        for(int i=0;i<size;i++){
            v2[i]=v[i];
        }
        delete[] v;
        v=v2;
        v[size]=x;
        size++;
    }else{
        v[size]=x;
        size++;
    }
}

struct qintnode{
    int x;
    qintnode *qn;
};

struct qint{
    qintnode *b=nullptr, *e;

    void push(int x);
    void pop();
    int front();
    bool empty();
};

void qint::push(int x){
    qintnode *aux;
    aux=new qintnode;
    aux->x=x;
    aux->qn=nullptr;
    if(b==nullptr){
        b=aux;
    }else{
        e->qn=aux;
    }
    e=aux;
}

void qint::pop(){
    qintnode *p=b;
    b=b->qn;
    delete p;
}

int qint::front(){
    return b->x;
}

bool qint::empty(){
    return b==nullptr;
}

const int nmax=100000;

vector g[nmax+1];

int d[nmax+1];

qint q;

int main(){
    int n,m,s;
    fin>>n>>m>>s;
    for(int i=1;i<=m;i++){
        int x,y;
        fin>>x>>y;
        g[x].push_back(y);
    }
    q.push(s);
    d[s]=1;
    while(q.empty()==0){
        int x=q.front();
        q.pop();
        for(int i=0;i<g[x].size;i++){
            int xn=g[x].v[i];
            if(d[xn]>d[x]+1||d[xn]==0){
                d[xn]=d[x]+1;
                q.push(xn);
            }
        }
    }
    for(int i=1;i<=n;i++){
        fout<<d[i]-1<<" ";
    }
    fout<<"\n";
    return 0;
}