zoukankan      html  css  js  c++  java
  • 每日算法-03机器人的运动范围

    今天不学习,明天我就是垃圾了,不要!!!!

    地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?
    示例 1:
    输入:m = 2, n = 3, k = 1
    输出:3
    例 1:
    输入:m = 3, n = 1, k = 0
    输出:1
    提示:
    1 <= n,m <= 100
    0 <= k <= 20

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    public class G机器人的运动范围 {
    	static int []dx= {1,0,-1,0};
    	static int []dy= {0,-1,0,1};
    	static Scanner in=new Scanner(System.in);
    	static int m=0;static int n=0;static int k=0;
    	static int vis[][]=new int[100][100];static int sum=1;
    	static Queue<Integer>qx=new LinkedList<>();
    	static Queue<Integer>qy=new LinkedList<>();
    	static int [][]map=new int [100][100];
    	
    	public static boolean inmap(int x,int y)
    	{
    		return(x>=0&&x<=m&&y>=0&&y<n);
    	}
    	public static int fj(int x)
    	{
    		int ans=0;
    		while(x>0)
    		{
    			ans+=x%10;
    			x/=10;
    		}
    		return ans;
    		
    	}
    	public static void bfs(int x,int y,int k)
    	{
    		while(!qx.isEmpty())
    		{
    			for(int i=0;i<4;i++)
    			{
    				int xx=qx.peek()+dx[i];
    				int yy=qy.peek()+dy[i];
    				if(inmap(xx,yy)&&vis[xx][yy]!=1&&fj(xx)+fj(yy)<=k)
    				{
    					sum++;
    					vis[xx][yy]=1;
    					qx.offer(xx);
    					qy.offer(yy);
    				}
    			}
    			qx.poll();
    			qy.poll();
    		}
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		 m=in.nextInt();n=in.nextInt();k=in.nextInt();
    		 for(int i=0;i<m;i++)
    		 {
    			 for(int j=0;j<n;j++)
    			 {
    				 map[i][j]=i+j;
    			 }
    		 }
    		 qx.offer(0);
    		 qy.offer(0);
    		 vis[0][0]=1;
    		 bfs(0,0,k);
    		 System.out.print(sum);
    	}
    
    }
    

    注意点:
    1.sum初始化的时候应该等于1;因为坐标是从0,0开始的,即使k等于0;坐标数位之和也是满足>=k这一条件的;

    作者:Better又
    出处:https://www.cnblogs.com/lwyy1223-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Ubuntu下Nginx与Apache2修改默认端口号
    Kerbernetes的Pod资源管理进阶
    Kerbernetes的Pod资源管理
    Kerbernetes的Pod资源清单配置基础
    kubernetes快速入门
    K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
    CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
    8
    7
    6
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/12659304.html
Copyright © 2011-2022 走看看