BFS:
#include <bits/stdc++.h>
using namespace std;
const int dirX[] = {-1,1,0,0};
const int dirY[] = {0,0,-1,1};
bool solve(int x,int y,int T){
int sum = 0;
while(x>0){
sum += (x%10);
x/=10;
}
while(y>0){
sum += (y%10);
y/=10;
}
if(sum > T) return true;
return false;
}
int movingCount(int threshold, int rows, int cols)
{
int ans = 0;
queue<pair<int,int> > q;
map<pair<int,int>,bool> m;
q.push(make_pair(0,0));
while(!q.empty()){
pair<int,int> p = q.front();
q.pop();
if(m[p]) continue;
m[p] = 1;
int x = p.first;
int y = p.second;
if(solve(x,y,threshold)) continue;
//printf("<%d %d>\n",x,y);
ans ++;
for(int i=0;i<4;i++){
if(x + dirX[i]<0 || y + dirY[i] <0
|| x + dirX[i] >=rows || y + dirY[i] >=cols) continue;
q.push(make_pair(x+dirX[i],y+dirY[i]));
}
}
return ans;
}
int main(){
cout<<movingCount(8,10,10);
return 0;
}