Cod sursa(job #2520822)

Utilizator andreighinea1Ghinea Andrei-Robert andreighinea1 Data 9 ianuarie 2020 19:41:24
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define Nmax 100002

using namespace std;

ifstream f("bfs.in");
ofstream o("bfs.out");

int n,m,x,y,s;
int nr[Nmax]; // L-am pus pe int ca sa tin minte in el si lungimea drumului. Daca nu e necesara lung drumului se poate folosi bool
vector<int> g[Nmax];
queue<int> q;

void bfs(int start){
    int i;
    for(i=1;i<=n;++i)
        nr[i]=-1; // Le pun pe -1 pt ca inca nu au fost parcurse

    q.push(start);
    nr[start]=0;
    while(!q.empty()){
        int nod=q.front();
        q.pop();

        for(i=0;i<g[nod].size();++i){
            int u=g[nod][i];
            if(nr[u] == -1){ // Daca nu a mai fost vizitat
                q.push(u);
                nr[u]=nr[nod]+1;
            }
        }
    }
}

int main()
{
    int i;
    f >> n >> m >> s;
    for(i=1;i<=m;++i){
        f >> x >> y;
        g[x].push_back(y);
    }
    bfs(s);

    for(i=1;i<=n;++i)
        o << nr[i] << " ";

    return 0;
}