package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param threshold int整型 
 * @param rows int整型 
 * @param cols int整型 
 * @return int整型
*/
func movingCount( threshold int ,  rows int ,  cols int ) int {
    dirs:=[][]int{[]int{0,1},[]int{0,-1},[]int{1,0},[]int{-1,0}}
    vis:=make([][]bool,rows)
    for i,_:=range vis{
        vis[i]=make([]bool,cols)
    }
    ans:=0
    var dfs func(int,int)
    dfs=func(i,j int){
        if i<0||i>=rows||j<0||j>=cols||vis[i][j]||check(i,j,threshold){
            return
        }
        vis[i][j]=true
        ans++
        for _,dir:=range dirs{
            x,y:=i+dir[0],j+dir[1]
            dfs(x,y)
        }
    }
    dfs(0,0)
    return ans
}

func check(i,j,std int)bool{
    cnt:=0
    for i>0{
        cnt+=i%10
        i/=10
    }
    for j>0{
        cnt+=j%10
        j/=10
    }
    return cnt>std
}