地上有一个 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<=50
0<=n<=50
0<=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; }