MCPcopy Create free account
hub / github.com/codedecks-in/LeetCode-Solutions / Solution

Class Solution

C++/Unique-Paths-III.cpp:2–66  ·  view source on GitHub ↗

I am using here backtracking with memoization (look at 'used').

Source from the content-addressed store, hash-verified

1// I am using here backtracking with memoization (look at 'used').
2class Solution {
3private:
4 int n;
5 int m;
6 int answer = 0;
7 int required = 0;
8
9 bool isValid(int x, int y) {
10 return (0 <= x && x < n) && (0 <= y && y < m);
11 }
12
13 void dfs(vector<vector<int>> &grid, pair<int, int> s, pair<int, int> e, vector<pair<int, int>>& st, vector<vector<bool>> &used) {
14 if (!st.empty() && st.back() == e && st.size() == required - 1) {
15 ++answer;
16
17 return;
18 }
19
20 vector<int> dx = {0, 1, 0, -1};
21 vector<int> dy = {-1, 0, 1, 0};
22
23 used[s.first][s.second] = true;
24 for (int i = 0; i < 4; ++i) {
25 if (isValid(s.first + dx[i], s.second + dy[i]) && (grid[s.first + dx[i]][s.second + dy[i]] == 0 || grid[s.first + dx[i]][s.second + dy[i]] == 2) && !used[s.first + dx[i]][s.second + dy[i]]) {
26 used[s.first + dx[i]][s.second + dy[i]] = true;
27 st.push_back({s.first + dx[i], s.second + dy[i]});
28 dfs(grid, {s.first + dx[i], s.second + dy[i]}, e, st, used);
29 st.pop_back();
30 used[s.first + dx[i]][s.second + dy[i]] = false;
31 }
32 }
33 }
34public:
35 int uniquePathsIII(vector<vector<int>>& grid) {
36 n = (int) grid.size();
37 m = (int) grid[0].size();
38
39 pair<int, int> s;
40 pair<int, int> e;
41 for (int i = 0; i < n; ++i) {
42 for (int j = 0; j < m; ++j) {
43 if (grid[i][j] == 1) {
44 s = {i, j};
45 ++required;
46 }
47
48 if (grid[i][j] == 2) {
49 e = {i, j};
50 ++required;
51 }
52
53 if (grid[i][j] == 0) {
54 ++required;
55 }
56 }
57 }
58
59 vector<pair<int, int>> st;
60 vector<vector<bool>> used(n, vector<bool> (m, false));

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected