36 lines
843 B
C++
36 lines
843 B
C++
|
#include <vector>
|
||
|
|
||
|
struct Solution {
|
||
|
using edges_t = std::vector<std::vector<int>>;
|
||
|
|
||
|
bool validPath(int n, const edges_t &edges, int source, int destination) {
|
||
|
std::vector<bool> 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<bool> &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;
|
||
|
}
|
||
|
};
|