关注
用到了回溯。 具体步骤是这样的:
1、计算当前位置可以前进的方向。可以前进的判断方式是:该方向的下一个位置没有到达过 且 该方向的下一个位置没有障碍。使用Set存储机器人到达过的位置。
2、遍历可以前进的方向,递归进行试探,边界条件是:当前位置没有可以移动的方向。此时跳出该层,回溯到上一个位置,向上一个位置的另一个可移动方向进行试探。
3、递归结束后,计算Set中元素的个数,即为房间的面积。
代码亲测可用。
import java.util.*;
public class Main{
static int x=0,y=0;//初始机器人位置
public static boolean move (int dir){//为了测试,自己写了一个move方法,比较片面
int[][] array= {//地图矩阵
{0,0,0,0,0,0,0,1,1,1,1,1},
{0,0,0,0,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,1,1,1},
{0,0,0,0,0,0,0,1,1,1,1,1},
{0,0,0,0,1,1,1,1,1,1,1,1}
};
int x_m=array.length;
int y_m=array[0].length;
switch(dir) {
case 0:
if(y+1>=y_m || array[x][y+1]!=0) {
return false;
}
y++;
break;
case 1:
if(x+1>=x_m || array[x+1][y]!=0) {
return false;
}
x++;
break;
case 2:
if(y-1<0 || array[x][y-1]!=0) {
return false;
}
y--;
break;
case 3:
if(x-1<0 || array[x-1][y]!=0) {
return false;
}
x--;
break;
default:
break;
}
return true;
}
//计算面积的函数 public static int problem3 (int x,int y,Set<String> set){
set.add(x+","+y); //如果方向0的位置未到达过,且该位置没有障碍物,则移动到该位置。 if(!set.contains(x+","+(y+1)) && move(0)) {
problem3 (x,y+1,set);//迭代计算下一个位置的情况
move(2);//回溯
}
if(!set.contains((x+1)+","+y) && move(1)) {
problem3 (x+1,y,set);
move(3);
}
if(!set.contains(x+","+(y-1)) && move(2)) {
problem3 (x,y-1,set);
move(0);
}
if(!set.contains((x-1)+","+y) && move(3)) {
problem3 (x-1,y,set);
move(1);
}
return set.size();
} public static void main(String[] String){
Set<String> set=new HashSet<String>(); System.out.println(problem3(0,0,set)); } }
查看原帖
点赞 2
相关推荐
查看9道真题和解析 点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
172543次浏览 2919人参与
# 找工作,行业重要还是岗位重要? #
85264次浏览 1688人参与
# 职场上哪些行为很加分? #
306832次浏览 3452人参与
# 大家每天通勤多久? #
69739次浏览 442人参与
# 实习的内耗时刻 #
211126次浏览 1539人参与
# 你面试体验感最差/最好的公司 #
17598次浏览 290人参与
# 一人说一个提前实习的好处 #
10603次浏览 204人参与
# 今年你最想重开的一场面试是? #
4011次浏览 69人参与
# 秋招落幕,你是He or Be #
11953次浏览 237人参与
# 互联网行业现在还值得去吗 #
46901次浏览 351人参与
# 实习没事做是福还是祸? #
16628次浏览 254人参与
# 面试吐槽bot #
164987次浏览 814人参与
# 重来一次,你会对开始求职的自己说 #
6009次浏览 152人参与
# 反问环节如何提问 #
126363次浏览 2663人参与
# 礼物开箱Plog #
672次浏览 24人参与
# 工作中听到最受打击的一句话 #
6539次浏览 113人参与
# 团建是“福利”还是是 “渡劫” #
7123次浏览 150人参与
# 我的第一份实习怎么找的 #
208532次浏览 1827人参与
# 比亚迪工作体验 #
74684次浏览 281人参与
# 大家实习每天都在干啥 #
106510次浏览 581人参与
