AcWing22:机器人的运动范围
Posted 劭兮劭兮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing22:机器人的运动范围相关的知识,希望对你有一定的参考价值。
问题
原题链接:
机器人的运动范围
JAVA实现
class Solution {
class Node {
int x;
int y;
public Node(int x,int y) {
this.x=x;
this.y=y;
}
}
// public static void main(String[] args) {
// int result = movingCount(18,40,40);
// System.out.println(result);
// }
public int movingCount(int threshold, int rows, int cols)
{
// 如果是0row 0column 的表格,没有走的路线
if(rows == 0 && cols == 0) {
return 0;
}
// 从(0,0)出发,至少走过一个格子
int result = 1;
// 可以移动的位置
int[][] move= {{0,1},{1,0},{0,-1},{-1,0}};
int[][] book = new int[rows][cols];
// (0,0)已经走过
book[0][0] = 1;
Queue<Node> queue = new LinkedList<>();
// 先把(0,0)添加到队列中
queue.offer(new Node(0,0));
while(!queue.isEmpty()) {
// 取出队列中第一个元素,并删除
Node node = queue.poll();
// 依次判断 机器人可以走的位置,上下左右
for(int i = 0;i<move.length;i++) {
int rowPoint = node.x + move[i][0];
int colPoint = node.y + move[i][1];
if(rowPoint >= 0 && rowPoint < rows
&& colPoint >= 0 && colPoint < cols
&& book[rowPoint][colPoint] ==0
&& check(rowPoint,colPoint,threshold)) {
result++;
queue.offer(new Node(rowPoint,colPoint));
book[rowPoint][colPoint] = 1;
}
}
}
return result;
}
public boolean check(int rowPoint,int colPoint,int threshold) {
int sum = 0;
while(rowPoint != 0) {
sum = sum + rowPoint%10;
rowPoint = rowPoint/10;
}
while(colPoint != 0) {
sum = sum + colPoint%10;
colPoint = colPoint/10;
}
if(sum <= threshold) {
return true;
}else {
return false;
}
}
}
以上是关于AcWing22:机器人的运动范围的主要内容,如果未能解决你的问题,请参考以下文章