AlgoPlus v0.1.0
Loading...
Searching...
No Matches
bfs.h
1#ifndef BFS_H
2#define BFS_H
3
4#ifdef __cplusplus
5#include <cstdint>
6#include <queue>
7#include <unordered_map>
8#include <unordered_set>
9#include <vector>
10#endif
11
21template <typename T> bool bfs(std::unordered_map<T, std::vector<T>>& adj, T start, T key) {
22 std::unordered_set<T> visited;
23 std::queue<T> q;
24
25 visited.insert(start);
26 q.push(start);
27 if (adj.empty()) {
28 return -1;
29 } else if (start == key)
30 return start;
31
32 while (!q.empty()) {
33 int64_t size = q.size();
34 for (int64_t i = 0; i < size; i++) {
35 auto current = q.front();
36 if (current == key) {
37 return true;
38 }
39 q.pop();
40 for (T x : adj[current]) {
41 if (visited.find(x) == visited.end()) {
42 visited.insert(x);
43 q.push(x);
44 }
45 }
46 }
47 }
48 return false; // Not found
49}
50
51#endif