暴力搜索
dfs搜索,特别要注意m和n有可能为0,所以要特判m和n同时为0的情况,输出0。
c++solution类的交题方式实在有点迷,还要抽个时间学一下c++的类,说不定以后能用得上。
ac代码:
class Solution {
public:
int k=0;
int m=0,n=0;
int cnt=0;
int vis[55][55];
bool check(int nx,int ny){
if(nx<0||nx>m-1)
return false;
if(ny<0||ny>n-1)
return false;
if(nx/10+nx%10+ny/10+ny%10>k)
return false;
if(vis[nx][ny]==1)
return false;
return true;
}
void dfs(int x,int y){
int dirx[4]={0,0,-1,1};
int diry[4]={-1,1,0,0};
// cout<<"x=="<<x<<"y=="<<y<<endl;
cnt++;
vis[x][y]=1;
for(int i=0;i<4;i++){
int nx=x+dirx[i];
int ny=y+diry[i];
if(check(nx,ny))
dfs(nx,ny);
}
return;
}
int movingCount(int threshold, int rows, int cols)
{
k=threshold;
m=rows;
n=cols;
dfs(0,0);
if(m==0&&n==0)
return 0;
return cnt;
}
};