Cod sursa(job #2782888)

Utilizator redikusTiganus Alexandru redikus Data 13 octombrie 2021 13:10:35
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;

class graf{

    vector<vector<int>> adiacenta;

public:
    graf(vector<vector<int>> a): adiacenta(a) {};

    vector<int> bfs(int x){
        vector<int> res(this->adiacenta.size());
        queue<int> q;
        vector<int> vis(this->adiacenta.size());
        vis[x]=1;
        q.push(x);
        int cnt=1;
        while(!q.empty()){
            int curr = q.front();
            q.pop();
            for(int i=0; i<this->adiacenta.size(); i++){
                if(vis[i] == 0 && this->adiacenta[curr][i] == 1){
                    vis[i] = 1;
                    q.push(i);
                    res[i]=res[curr]+1;
                }
            }
        }
        for(int i=0; i<res.size(); i++){
            if(res[i]==0 && i!=x){
                res[i]=-1;
            }
        }
        return res;
    }

};

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

int main(){

    int n, m, s;
    in>>n>>m>>s;
    vector<vector<int>> mat(n, vector<int>(n));
    for(int i=0; i<m; i++){
        int aux1, aux2;
        in>>aux1>>aux2;
        mat[aux1-1][aux2-1]=1;
    }
    graf x(mat);
    for(int a:x.bfs(s-1)){
        out<<a<<" ";
    }
    return 0;
}