地上有一个 mm 行和 nn 列的方格,横纵坐标范围分别是 0∼m−10∼m−1 和 0∼n−10∼n−1。
一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。
但是不能进入行坐标和列坐标的数位之和大于 kk 的格子。
请问该机器人能够达到多少个格子?
样例1
输入:k=7, m=4, n=5
输出:20
样例2
输入:k=18, m=40, n=40
输出:1484
解释:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。
但是,它不能进入方格(35,38),因为3+5+3+8 = 19。
注意:
0<=m<=500<=n<=500<=k<=100
代码:
#include<bits/stdc++.h>
using namespace std;
int k,m,n;
int ans=0;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int vis[55][55];
struct node
{
int x,y;
};
void bfs()
{
queue<node>q;
node e;
e.x=0;
e.y=0;
q.push(e);
while(!q.empty())
{
node st=q.front();
q.pop();
if(st.x%10+st.x/10+st.y%10+st.y/10<=k)ans++;
for(int i=0;i<4;i++)
{
node nx;
nx.x=st.x+dx[i];
nx.y=st.y+dy[i];
if(nx.x>=0&&nx.x<m&&nx.y>=0&&nx.y<n&&!vis[nx.x][nx.y])
{
q.push(nx);
vis[nx.x][nx.y]=1;
}
}
}
return ;
}
int main()
{
scanf("%d%d%d",&k,&m,&n);
bfs();
printf("%d\n",ans-1);
return 0;
}