2017第八届蓝桥杯省赛Java A组--迷宫
2018-03-19 18:04
288 查看
标题:迷宫
X星球的一处迷宫游乐场建在某个小山坡上。
它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。
我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,
R表示走到右边的房间,
U表示走到上坡方向的房间,
D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。
他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。
玩家一定要按照地上的字母移动。
迷宫地图如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
请你计算一下,最后,有多少玩家会走出迷宫?
而不是在里边兜圈子。
请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。
如果你还没明白游戏规则,可以参看一个简化的4x4迷宫的解说图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/03/879a1acdc9f00682db7f8213d7540efc)
此题为第一题,填空题只需要算出结果即可,难度较低。
遍历每一个人的坐标,让其一直吵着箭头方向行走,走过的房间标记为cover[x][y]=1,
直到走出去或是绕圈圈(再次遇到cover[x][y]=1的房间)。
代码如下:public class Main{
static int ok = 0,res = 0;
static char road[][] = new char[][]{{'U','D','D','L','U','U','L','R','U','L'},
{'U','U','R','L','L','L','R','R','R','U'},
{'R','R','U','U','R','L','D','L','R','D'},
{'R','U','D','D','D','D','U','U','U','U'},
{'U','R','U','D','L','L','R','R','U','U'},
{'D','U','R','L','R','L','D','L','R','L'},
{'U','L','L','U','R','L','L','R','D','U'},
{'R','D','L','U','L','L','R','D','D','D'},
{'U','U','D','D','U','D','U','D','L','L'},
{'U','L','R','D','L','U','U','R','R','R'}};
static int cover[][] = new int[10][10];
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<10;i++){
for(int k=0;k<10;k++){
ok = 0;
cover = new int[10][10];
dfs(i,k);
if(ok==1){
res++;
//System.out.println(i+","+k); 输出能走出迷宫的人的坐标,方便检查结果
}
}
}
System.out.println(res);
}
static void dfs(int x,int y){
if(x==-1||x==10||y==-1||y==10){
ok = 1;
return;
}
if(cover[x][y]==1) return;
cover[x][y] = 1;
if(road[x][y]=='U'){
dfs(x-1,y);
}
else if(road[x][y]=='D'){
dfs(x+1,y);
}
else if(road[x][y]=='L'){
dfs(x,y-1);
}
else if(road[x][y]=='R'){
dfs(x,y+1);
}
}
}
X星球的一处迷宫游乐场建在某个小山坡上。
它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。
我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,
R表示走到右边的房间,
U表示走到上坡方向的房间,
D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。
他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。
玩家一定要按照地上的字母移动。
迷宫地图如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
请你计算一下,最后,有多少玩家会走出迷宫?
而不是在里边兜圈子。
请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。
如果你还没明白游戏规则,可以参看一个简化的4x4迷宫的解说图:
此题为第一题,填空题只需要算出结果即可,难度较低。
遍历每一个人的坐标,让其一直吵着箭头方向行走,走过的房间标记为cover[x][y]=1,
直到走出去或是绕圈圈(再次遇到cover[x][y]=1的房间)。
代码如下:public class Main{
static int ok = 0,res = 0;
static char road[][] = new char[][]{{'U','D','D','L','U','U','L','R','U','L'},
{'U','U','R','L','L','L','R','R','R','U'},
{'R','R','U','U','R','L','D','L','R','D'},
{'R','U','D','D','D','D','U','U','U','U'},
{'U','R','U','D','L','L','R','R','U','U'},
{'D','U','R','L','R','L','D','L','R','L'},
{'U','L','L','U','R','L','L','R','D','U'},
{'R','D','L','U','L','L','R','D','D','D'},
{'U','U','D','D','U','D','U','D','L','L'},
{'U','L','R','D','L','U','U','R','R','R'}};
static int cover[][] = new int[10][10];
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<10;i++){
for(int k=0;k<10;k++){
ok = 0;
cover = new int[10][10];
dfs(i,k);
if(ok==1){
res++;
//System.out.println(i+","+k); 输出能走出迷宫的人的坐标,方便检查结果
}
}
}
System.out.println(res);
}
static void dfs(int x,int y){
if(x==-1||x==10||y==-1||y==10){
ok = 1;
return;
}
if(cover[x][y]==1) return;
cover[x][y] = 1;
if(road[x][y]=='U'){
dfs(x-1,y);
}
else if(road[x][y]=='D'){
dfs(x+1,y);
}
else if(road[x][y]=='L'){
dfs(x,y-1);
}
else if(road[x][y]=='R'){
dfs(x,y+1);
}
}
}
相关文章推荐
- 2017第八届蓝桥杯省赛Java A组--迷宫
- 2017第八届蓝桥杯省赛Java A组--最大公共子串
- 蓝桥杯第八届省赛JAVA真题----迷宫
- 2017第八届蓝桥杯省赛Java A组--包子凑数
- 2017第八届蓝桥杯 02 兴趣小组(java)
- 2017第八届蓝桥杯Java B组省赛第一题:购物单
- 2017第八届蓝桥杯 06 最大公共子串(java)
- 2017第八届蓝桥杯 01 外星日历(java)
- 蓝桥杯第八届C/C++ A组省赛(2017)第一题:迷宫
- 2017第八届蓝桥杯Java省赛有感
- 2017第八届蓝桥杯 08 包子凑数(java)
- 2017第八届蓝桥杯 04 取数位(java)
- 2017第八届蓝桥杯省赛Java A组--取球博弈
- 2017第八届蓝桥杯 04 承压计算(java)
- 2017第八届蓝桥杯省赛Java A组--方格分割
- 2017第八届蓝桥杯省赛Java A组--正则问题
- 2017第八届蓝桥杯省赛-大学A组 迷宫(暴力dfs)
- 2017第八届蓝桥杯 03 纸牌三角形(java)
- 2017第八届蓝桥杯 07 Excel地址(java)
- 2017第八届蓝桥杯 05 杨辉三角(java)