Advertisement
matheus_monteiro

Grid Paths

Jun 29th, 2024
708
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3.  
  4. string s;
  5. int dr[] = {-1, 0, 1, 0};
  6. int dc[] = {0, 1, 0, -1};
  7. int visitado[10][10];
  8.  
  9. int getDir(char c) {
  10.     if(c == 'R')
  11.         return 1;
  12.     if(c == 'L')
  13.         return 3;
  14.     if(c == 'D')
  15.         return 2;
  16.     if(c == 'U')
  17.         return 0;
  18.     return -1;
  19. }
  20.  
  21. int solve(int i, int r, int c) {
  22.     if(i == s.size()) {
  23.         if(r == 7 && c == 1)
  24.             return 1;
  25.         return 0;
  26.     }
  27.  
  28.     // caso 1
  29.     if(visitado[r][c - 1] == 1 && visitado[r][c + 1] == 1 &&
  30.         visitado[r - 1][c] == 0 && visitado[r + 1][c] == 0)
  31.         return 0;
  32.  
  33.     // caso 2
  34.     if(visitado[r - 1][c] == 1 && visitado[r + 1][c] == 1 &&
  35.         visitado[r][c - 1] == 0 && visitado[r][c + 1] == 0)
  36.         return 0;
  37.  
  38.     //caso 3
  39.     if(r == 7 && c == 1)
  40.         return 0;
  41.  
  42.     int cnt = 0;
  43.     int d = getDir(s[i]);
  44.  
  45.     visitado[r][c] = 1;
  46.  
  47.     if(d == -1) {
  48.         for(int j = 0; j < 4; ++j) {
  49.             if(visitado[ r + dr[j] ][ c + dc[j] ] == 0)
  50.                 cnt += solve(i + 1, r + dr[j], c + dc[j]);
  51.         }
  52.     } else if(visitado[ r + dr[d] ][ c + dc[d] ]  == 0) {
  53.             cnt += solve(i + 1, r + dr[d], c + dc[d]);
  54.     }
  55.  
  56.     visitado[r][c] = 0;
  57.  
  58.     return cnt;
  59. }
  60.  
  61. int main() {
  62.     cin >> s;
  63.  
  64.     for(int i = 0; i <= 8; ++i) {
  65.         visitado[0][i] = 1;
  66.         visitado[i][0] = 1;
  67.         visitado[8][i] = 1;
  68.         visitado[i][8] = 1;
  69.     }
  70.  
  71.     cout << solve(0, 1, 1) << '\n';
  72.  
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement