Pagini recente » Cod sursa (job #1006201) | Cod sursa (job #3165308) | Cod sursa (job #3155601) | Cod sursa (job #2195669) | Cod sursa (job #3160522)
//
// Created by Stefan on 24-Oct-23.
//
#include <fstream>
#include <queue>
#include<vector>
#include<unordered_map>
#include<tuple>
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, -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;
}