Practical
BFS In Parallel using OpenMP
#include <iostream>
#include <queue>
#include <vector>
#include <omp.h>
using namespace std;
void addEdge(vector<vector<int>>& adj, int u, int v){
adj[u].push_back(v);
adj[v].push_back(u);
}
void bfs(vector<vector<int>>& adj, int s){
queue<int> q;
vector<bool> visited([Link](), false);
visited[s] = true;
[Link](s);
while(![Link]()){
int curr = [Link]();
[Link]();
cout << curr << " ";
#pragma omp parallel for
for(int i = 0; i < adj[curr].size(); i++){
int x = adj[curr][i];
if(!visited[x]){
#pragma omp critical
{
if (!visited[x]) {
visited[x] = true;
[Link](x);
}
}
}
}
}
}
int main(){
int V = 5;
vector<vector<int>> adj(V);
addEdge(adj, 0, 1);
addEdge(adj, 0, 2);
addEdge(adj, 2, 3);
addEdge(adj, 1, 4);
addEdge(adj, 2, 4);
cout << "BFS starting from 0 : \n";
bfs(adj, 0);
return 0;
}
Output