DFS题目:机器人的运动范围
思路
建立一个二维数组visited用于保存dfs过程中访问过的点,题目涉及到数位求和判断与k的大小关系,因此在dfs函数之外还要有一个判断下标数位和与k大小关系的函数
题解代码
class Solution {
public:
bool check(int i,int j,int k){//判断i,j的数位和与k的大小关系
int sum=0;
while(i){
sum+=i%10;
i/=10;
}
while(j){
sum+=j%10;
j/=10;
}
return sum>k;
}
int dfs(vector<vector<bool>>& visited,int i,int j,int k,int m,int n){
if(i<0||j<0||i>=m||j>=n||check(i,j,k)||visited[i][j])return 0;
visited[i][j]=true;
//上下左右四个方向遍历,每次将四个方向求和再+1即为最后的最大值
return 1+dfs(visited,i+1,j,k,m,n)+dfs(visited,i,j+1,k,m,n)+
dfs(visited,i-1,j,k,m,n)+dfs(visited,i,j-1,k,m,n);
}
int movingCount(int m, int n, int k) {
vector<vector<bool>> visited(m,vector<bool>(n,false));
return dfs(visited,0,0,k,m,n);
}
};