class Solution {
public:
bool fun(int m ,int n ,int k)
{
int sum=0;
while(m)
{
sum=sum+m%10;
m=m/10;
}
while(n)
{
sum=sum+n%10;
n=n/10;
}
if(sum<=k) return true;
else return false;
}
int movingCount(int m, int n, int k)
{
int count=0;
queue< pair<int,int> >q;
q.push(make_pair(0,0));
vector< vector<int> >visited(m,vector<int>(n,0));
visited[0][0]=1;
while( !q.empty() )
{
auto temp=q.front();//队列里存放的是可以到达的
q.pop();
int x=temp.first;
int y=temp.second;
count++;//记录数值
//四个方向数组
int d[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
for(int i=0;i<4;i++)
{
//注意这里
int nx=x+d[i][0];
int ny=y+d[i][1];
if(nx>=0 && nx<m && ny>=0 && ny<n && visited[nx][ny]==0 && fun(nx,ny,k) )
{
visited[nx][ny]=1;
q.push( make_pair(nx,ny) );
}
}
}
return count;
}
};