#include <iostream>
#include <vector>
#include <queue>
#include <omp.h>
using namespace std;
// Function to perform Depth First Search (DFS)
void dfs(vector<vector<int>>& graph, vector<bool>& visited, int node) {
visited[node] = true;
cout << node << " ";
#pragma omp parallel for
for (int i = 0; i < graph[node].size(); ++i) {
int next_node = graph[node][i];
if (!visited[next_node]) {
dfs(graph, visited, next_node);
}
}
}
// Function to perform Breadth First Search (BFS)
void bfs(vector<vector<int>>& graph, int start_node) {
vector<bool> visited(graph.size(), false);
queue<int> q;
q.push(start_node);
visited[start_node] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
cout << node << " ";
#pragma omp parallel for
for (int i = 0; i < graph[node].size(); ++i) {
int next_node = graph[node][i];
if (!visited[next_node]) {
visited[next_node] = true;
q.push(next_node);
}
}
}
}
int main() {
// Example undirected graph representation
vector<vector<int>> graph = {
{1, 2}, // Node 0
{0, 3, 4}, // Node 1
{0, 5}, // Node 2
{1}, // Node 3
{1}, // Node 4
{2} // Node 5
};
cout << "DFS traversal: ";
vector<bool> visited_dfs(graph.size(), false);
dfs(graph, visited_dfs, 0);
cout << endl;
cout << "BFS traversal: ";
bfs(graph, 0);
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxvbXAuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBGdW5jdGlvbiB0byBwZXJmb3JtIERlcHRoIEZpcnN0IFNlYXJjaCAoREZTKQp2b2lkIGRmcyh2ZWN0b3I8dmVjdG9yPGludD4+JiBncmFwaCwgdmVjdG9yPGJvb2w+JiB2aXNpdGVkLCBpbnQgbm9kZSkgewogICAgdmlzaXRlZFtub2RlXSA9IHRydWU7CiAgICBjb3V0IDw8IG5vZGUgPDwgIiAiOwoKICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvcgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncmFwaFtub2RlXS5zaXplKCk7ICsraSkgewogICAgICAgIGludCBuZXh0X25vZGUgPSBncmFwaFtub2RlXVtpXTsKICAgICAgICBpZiAoIXZpc2l0ZWRbbmV4dF9ub2RlXSkgewogICAgICAgICAgICBkZnMoZ3JhcGgsIHZpc2l0ZWQsIG5leHRfbm9kZSk7CiAgICAgICAgfQogICAgfQp9CgovLyBGdW5jdGlvbiB0byBwZXJmb3JtIEJyZWFkdGggRmlyc3QgU2VhcmNoIChCRlMpCnZvaWQgYmZzKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIGdyYXBoLCBpbnQgc3RhcnRfbm9kZSkgewogICAgdmVjdG9yPGJvb2w+IHZpc2l0ZWQoZ3JhcGguc2l6ZSgpLCBmYWxzZSk7CiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBxLnB1c2goc3RhcnRfbm9kZSk7CiAgICB2aXNpdGVkW3N0YXJ0X25vZGVdID0gdHJ1ZTsKCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCBub2RlID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgY291dCA8PCBub2RlIDw8ICIgIjsKCiAgICAgICAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncmFwaFtub2RlXS5zaXplKCk7ICsraSkgewogICAgICAgICAgICBpbnQgbmV4dF9ub2RlID0gZ3JhcGhbbm9kZV1baV07CiAgICAgICAgICAgIGlmICghdmlzaXRlZFtuZXh0X25vZGVdKSB7CiAgICAgICAgICAgICAgICB2aXNpdGVkW25leHRfbm9kZV0gPSB0cnVlOwogICAgICAgICAgICAgICAgcS5wdXNoKG5leHRfbm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8gRXhhbXBsZSB1bmRpcmVjdGVkIGdyYXBoIHJlcHJlc2VudGF0aW9uCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGdyYXBoID0gewogICAgICAgIHsxLCAyfSwgICAgIC8vIE5vZGUgMAogICAgICAgIHswLCAzLCA0fSwgIC8vIE5vZGUgMQogICAgICAgIHswLCA1fSwgICAgIC8vIE5vZGUgMgogICAgICAgIHsxfSwgICAgICAgIC8vIE5vZGUgMwogICAgICAgIHsxfSwgICAgICAgIC8vIE5vZGUgNAogICAgICAgIHsyfSAgICAgICAgIC8vIE5vZGUgNQogICAgfTsKCiAgICBjb3V0IDw8ICJERlMgdHJhdmVyc2FsOiAiOwogICAgdmVjdG9yPGJvb2w+IHZpc2l0ZWRfZGZzKGdyYXBoLnNpemUoKSwgZmFsc2UpOwogICAgZGZzKGdyYXBoLCB2aXNpdGVkX2RmcywgMCk7CiAgICBjb3V0IDw8IGVuZGw7CgogICAgY291dCA8PCAiQkZTIHRyYXZlcnNhbDogIjsKICAgIGJmcyhncmFwaCwgMCk7CiAgICBjb3V0IDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0K