2022-6-26 剑指offer-BFS
地上有一个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 class Solution { 2 public int movingCount(int m, int n, int k) { 3 int[][] dir={{-1,0},{1,0},{0,1},{0,-1}}; 4 Queue<int[]> queue=new LinkedList<>(); 5 boolean[][] visited=new boolean[m][n]; 6 queue.offer(new int[]{0,0}); 7 visited[0][0]=true; 8 int ans=0; 9 while (!queue.isEmpty()){ 10 int[] temp=queue.poll(); 11 ans++; 12 int x=temp[0]; 13 int y=temp[1]; 14 for (int i=0;i<4;i++){ 15 int dx=x+dir[i][0]; 16 int dy=y+dir[i][1]; 17 if (dx>=0&&dx<m&&dy>=0&&dy<n&&!visited[dx][dy]&&(count(dx)+count(dy)<=k)){ 18 queue.offer(new int[]{dx,dy}); 19 visited[dx][dy]=true; 20 } 21 } 22 } 23 return ans; 24 } 25 26 27 public int count(int x){ 28 int sum=0; 29 while (x>0){ 30 sum+=x%10; 31 x/=10; 32 } 33 return sum; 34 } 35 }
思路:BFS搜索。