思路
- DFS
- BFS
代码c++
思路1: DFS
class Solution {
public:
int movingCount(int m, int n, int k) {
vector<vector<bool>> visited(m,vector<bool>(n, false)); //visited数组
return DFS(0 ,0, m, n, visited, k);
}
int DFS(int i, int j, int m, int n, vector<vector<bool>>& visited, int k){
if(i >= m || j >= n || i < 0 || j < 0 || visited[i][j] == true){
return 0;
}
if(i % 10 + j % 10 + i / 10 + j / 10 > k){
return 0;
}
visited[i][j] = true;
return 1 + DFS(i, j+1, m, n, visited, k) + DFS(i+1, j, m, n, visited, k); // 1 + 右 + 下
}
};
思路2: BFS
class Solution {
public:
vector<pair<int, int>> directions = {{0, 1}, {1, 0}};
int movingCount(int m, int n, int k) {
vector<vector<bool>> visited(m,vector<bool>(n, false)); //visited数组
queue<pair<int, int>> q;// i,j
q.push({0,0});
int res = 0;
while(!q.empty()){
auto cur = q.front();
q.pop();
int i = cur.first;
int j = cur.second;
if(visited[i][j] == true){
continue;
}
res++;
visited[i][j] = true;
for(auto d : directions){
int ii = i + d.first;
int jj = j + d.second;
if(ii >= m || jj >= n || visited[ii][jj] == true || ii % 10 + jj % 10 + ii / 10 + jj / 10 > k){
continue;
}
q.push({ii, jj});
}
}
return res;
}
};