关注
用到了回溯。 具体步骤是这样的:
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
相关推荐
点赞 评论 收藏
分享
程序员花海_:实习写的看起来像项目了
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 双非本秋招总结6037
- 2... 打工的这一年3635
- 3... 你会和mentor进行deeptalk吗?2959
- 4... 学院本 末 211 硕勇闯 java 后端实习美团 oc 逆袭指南2508
- 5... 双非本2025秋招总结:65w+SSP三选一,最终还是“有鹅选鹅”|附面试心路历程2434
- 6... 金丹后期牛友!我们新年再见2395
- 7... 牛客运营们,我保证这是我最后一次消费烤肠了!2395
- 8... 写给后辈们的一封信, 希望能帮助到你找第一份工作时少踩坑2187
- 9... 没人带+同事冷漠,真的会内耗2157
- 10... 希望新的一年,我依然是走向幸福的那个人2156
正在热议
更多
# 对2025年忏悔 #
4919次浏览 109人参与
# 你觉得专业和学校哪个对薪资影响最大 #
87639次浏览 587人参与
# 实习没人带,苟住还是跑路? #
13438次浏览 273人参与
# 巨人网络求职进展汇总 #
183920次浏览 1223人参与
# 元旦假期你打算怎么过 #
8615次浏览 175人参与
# 春招前还要继续实习吗? #
5555次浏览 66人参与
# 面试官问过你最刁钻的问题是什么? #
10604次浏览 102人参与
# 腾讯云智研发工作体验 #
34538次浏览 164人参与
# 大家实习都在做什么? #
8946次浏览 96人参与
# 如何缓解入职前的焦虑 #
247232次浏览 1439人参与
# 一人说一家双休的公司 #
7557次浏览 99人参与
# 我们是不是被“优绩主义”绑架了? #
9423次浏览 288人参与
# 新年的第一句祝福 #
51120次浏览 377人参与
# 腾讯工作体验 #
549092次浏览 3664人参与
# 领导秒批的请假话术 #
30605次浏览 121人参与
# 求职遇到的搞笑事件 #
154304次浏览 889人参与
# 妈妈治愈了你哪些脆皮时刻 #
38949次浏览 338人参与
# 我来点评面试官 #
38116次浏览 165人参与
# 机械人你觉得今年行情怎么样? #
6359次浏览 88人参与
# 设计人的面试记录 #
177815次浏览 1576人参与