您的位置:首页 > 编程语言 > Java开发

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迷宫的解说图:



此题为第一题,填空题只需要算出结果即可,难度较低。
遍历每一个人的坐标,让其一直吵着箭头方向行走,走过的房间标记为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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 蓝桥杯 算法