参照大神们的答案,理解后自己写的C语言版
C语言 代码
int vis[52][52]; //定义访问标记数组
int count=0; //全局计数变量
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1}; //四个方向坐标👉(1,0)👈(-1,0)👆(0,1)👇(0,-1)
int movingCount(int threshold, int rows, int cols) //主函数入口
{
memset(vis,0,sizeof(vis)); //初始化访问标记数组vis
dfs(0,0,rows,cols,threshold); //调用dfs函数
return count; //返回总数
}
// dfs函数
void dfs(int x,int y,int rows,int cols,int threshold){
if(x<0||y<0||x>rows-1||y>cols-1||vis[x][y]) //边界条件判断,过滤掉不满足边界条件的以及访问过的数据
return;
vis[x][y]=1; //符合条件,设置已访问标记
int sum=x/10+x%10+y/10+y%10;
if(sum>threshold) return; //阈值判断,超过阈值则直接跳过
for(int i=0;i<4;i++){ //四个方向递归调用dfs遍历
x+=dx[i];
y+=dy[i];
dfs(x,y,rows,cols,threshold);
}
count++; //总数变量值+1
}
你的递归调用的时候,修改了原本传递给函数的x,y值,会导致错误的结果。在递归调用之前保留原始的x,y值,应该重新定义两个新的变量作为参数传给dfs调用函数
兄弟你dfs的遍历是不是不对,
先x加1,y加0,
在x加-1,y加0,
这不是等于x,y吗