机器人的运动范围

地上有一个 mm 行和 nn 列的方格,横纵坐标范围分别是 0m10∼m−1 和 0n10∼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。

注意:

  1. 0<=m<=50
  2. 0<=n<=50
  3. 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; }

  

    

原文地址:https://www.cnblogs.com/chuliyou/p/12691187.html