commit 570c3259657abd45cd71cbfc7177f6301ce3ca7c
parent c954cebb1e9bbf5267f2d030844a03bc4caf8211
Author: superpozycja <anna@superpozycja.net>
Date: Sat, 26 Oct 2024 22:58:57 +0200
solve grid paths
Diffstat:
A | intro/grid_paths.cpp | | | 83 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 83 insertions(+), 0 deletions(-)
diff --git a/intro/grid_paths.cpp b/intro/grid_paths.cpp
@@ -0,0 +1,83 @@
+#include <bits/stdc++.h>
+
+using namespace std;
+
+using ui = unsigned int;
+using l = long;
+using ul = unsigned long;
+using ll = long long;
+using ull = unsigned long long;
+
+using vi = vector<int>;
+using vui = vector<ui>;
+using vl = vector<l>;
+using vul = vector<ul>;
+using vll = vector<ll>;
+using vull = vector<ull>;
+
+int v[7][7];
+int p, s;
+string path;
+
+void rec(int r, int c)
+{
+ if (v[r][c])
+ return;
+
+ if ((r == 0 && v[r+1][c]) || (r == 6 && v[r-1][c]))
+ if (c > 0 && c < 6 && !v[r][c-1] && !v[r][c+1])
+ return;
+
+ if ((c == 0 && v[r][c+1]) || (c == 6 && v[r][c-1]))
+ if (r > 0 && r < 6 && !v[r-1][c] && !v[r+1][c])
+ return;
+
+ if (r > 0 && r < 6 && v[r+1][c] && v[r-1][c])
+ if (c > 0 && c < 6 && !v[r][c-1] && !v[r][c+1])
+ return;
+
+ if (c > 0 && c < 6 && v[r][c+1] && v[r][c-1])
+ if (r > 0 && r < 6 && !v[r-1][c] && !v[r+1][c])
+ return;
+
+ if (r == 6 && c == 0) {
+ if(s == 48) {
+ p++;
+ }
+ return;
+ }
+ v[r][c] = 1;
+ if (r < 6 && !v[r + 1][c] && (path[s] == 'D' || path[s] == '?')) {
+ s++;
+ rec(r + 1, c);
+ s--;
+ }
+ if (r > 0 && !v[r - 1][c] && (path[s] == 'U' || path[s] == '?')) {
+ s++;
+ rec(r - 1, c);
+ s--;
+ }
+ if (c < 6 && !v[r][c + 1] && (path[s] == 'R' || path[s] == '?')) {
+ s++;
+ rec(r, c + 1);
+ s--;
+ }
+ if (c > 0 && !v[r][c - 1] && (path[s] == 'L' || path[s] == '?')) {
+ s++;
+ rec(r, c - 1);
+ s--;
+ }
+ v[r][c] = 0;
+}
+
+void solve()
+{
+ getline(cin, path);
+ rec(0, 0);
+ cout << p << "\n";
+}
+
+int main()
+{
+ solve();
+}