diff --git a/cpp/find-if-path-exists-in-graph.cpp b/cpp/find-if-path-exists-in-graph.cpp new file mode 100644 index 0000000..60d3966 --- /dev/null +++ b/cpp/find-if-path-exists-in-graph.cpp @@ -0,0 +1,35 @@ +#include + +struct Solution { + using edges_t = std::vector>; + + bool validPath(int n, const edges_t &edges, int source, int destination) { + std::vector visited(n); + visited[source] = true; + + bool changed; + do { + changed = iterate(edges, visited); + } while (changed && !visited[destination]); + + return visited[destination]; + } + + private: + bool iterate(const edges_t &edges, std::vector &visited) { + bool changed = false; + + for (const auto &edge : edges) { + auto [u, v] = std::tie(edge[0], edge[1]); + if (visited[u] == visited[v]) { + continue; + } + + visited[u] = true; + visited[v] = true; + changed = true; + } + + return changed; + } +};