zoukankan      html  css  js  c++  java
  • 机器人的运动范围

    地上有一个 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; }

      

        

  • 相关阅读:
    PDE_DATA 定义
    每天写日记争创青年艺术家 2014-5-14
    [Servlet3.0新功能]注释替代配置文件
    Flex4+Spring3+Hibernate3+BlazeDS整合笔记
    Flex博客
    hibernate缓存机制详细分析
    计算机的艺术-算法
    算法/数据结构/数学
    线性表 及Java实现 顺序表、链表、栈、队列
    java 图的邻接矩阵
  • 原文地址:https://www.cnblogs.com/chuliyou/p/12691187.html
Copyright © 2011-2022 走看看