aboutsummaryrefslogtreecommitdiff
path: root/store/works/solutions/leetcode/2.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-02-28 23:13:39 +0800
committerYuqian Yang <crupest@crupest.life>2025-02-28 23:13:39 +0800
commitdc1f0c4c0096013799416664894c5194dc7e1f52 (patch)
tree2f5d235f778cd720f4c39ec3e56b77ba6d99f375 /store/works/solutions/leetcode/2.cpp
parent7299d424d90b1effb6db69e3476ddd5af72eeba4 (diff)
downloadcrupest-dc1f0c4c0096013799416664894c5194dc7e1f52.tar.gz
crupest-dc1f0c4c0096013799416664894c5194dc7e1f52.tar.bz2
crupest-dc1f0c4c0096013799416664894c5194dc7e1f52.zip
chore(store): move everything to store.
Diffstat (limited to 'store/works/solutions/leetcode/2.cpp')
-rw-r--r--store/works/solutions/leetcode/2.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/store/works/solutions/leetcode/2.cpp b/store/works/solutions/leetcode/2.cpp
new file mode 100644
index 0000000..4cf9c73
--- /dev/null
+++ b/store/works/solutions/leetcode/2.cpp
@@ -0,0 +1,70 @@
+#include <algorithm>
+#include <iostream>
+#include <set>
+#include <queue>
+
+using std::vector;
+
+struct P {
+ int x;
+ int y;
+};
+
+struct I {
+ int x;
+ int y;
+ int v;
+};
+
+P mm[]{{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
+
+class Solution {
+public:
+ vector<vector<int>> bicycleYard(vector<int> &position,
+ vector<vector<int>> &terrain,
+ vector<vector<int>> &obstacle) {
+ std::vector<std::vector<std::set<int>>> visited(
+ terrain.size(), std::vector<std::set<int>>(terrain.front().size()));
+
+ std::queue<I> q{{position[0], position[1], 1}};
+
+ bool f = false;
+
+ while (true) {
+ if (f && q.size() == 1) {
+ break;
+ }
+ f = true;
+
+ I b = q.back();
+ q.pop_back();
+
+ if (b.v <= 0 || visited[b.x][b.y].count(b.v)) {
+
+ }
+
+ visited[b.x][b.y].insert(v);
+
+ for (auto p : mm) {
+ int nx = x + p.x, ny = y + p.y;
+ if (nx >= 0 && nx < terrain.size() && ny >= 0 &&
+ ny < terrain.front().size()) {
+ DFS(v + terrain[x][y] - terrain[nx][ny] - obstacle[nx][ny], nx, ny,
+ terrain, obstacle, visited);
+ }
+ }
+ }
+
+ vector<vector<int>> result;
+
+ for (int i = 0; i < terrain.size(); i++) {
+ for (int j = 0; j < obstacle.size(); j++) {
+ if ((i != position[0] || j != position[1]) && visited[i][j].count(1)) {
+ result.push_back({i, j});
+ }
+ }
+ }
+
+ return result;
+ }
+}; \ No newline at end of file