Cod sursa(job #3160519)

Utilizator stefanmo03Mocanu Stefan stefanmo03 Data 24 octombrie 2023 13:34:37
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
//
// Created by Stefan on 24-Oct-23.
//
#include <fstream>
#include <queue>
#include<vector>
#include<unordered_map>
#include<tuple>
int graf[100][100];
std::ifstream f("bfs.in");
std::ofstream g("bfs.out");

std::unordered_map<int,std::vector<int>> creaza_list(int n,int m, bool neorientat = true){
    std::unordered_map<int,std::vector<int>> graf_list;
    for(int i=0;i<m;i++){
        int m1, m2;
        f>>m1>>m2;
        graf_list[m1].push_back(m2);
        if(neorientat)graf_list[m2].push_back(m1);
    }
    return graf_list;
}
void BFS_list(int start,int n, std::unordered_map<int,std::vector<int>> graf_list){
    std::queue<std::tuple<int,int>> q;
    int dist=0;
    std::vector<int> distante(n, -1);
    q.push(std::make_tuple(start,dist));
    std::vector<int> viz(n);
    viz[start]= 1;
    while(!q.empty()){
        int vf;
        std::tie(vf,dist)=q.front();
        distante[vf]=dist;
        q.pop();
        for(auto w: graf_list[vf]){
            if(viz[w]==0){
                q.push(std::make_tuple(w, dist+1));
                viz[w]=1;
            }
        }
    }
    for(int i=1;i<=n;i++)g<<distante[i]<<" ";

}
int main() {
    int n,m,start;
    f>>n>>m>>start;
    //creaza_matr(n,m);
    //afis(n,m);
    //BFS_matr(2,9);

    std::unordered_map<int,std::vector<int>> graf_list = creaza_list(n, m,false);
    BFS_list(start,n,graf_list);
    return 0;
}