2017第八届蓝桥杯省赛Java A组--迷宫

版权声明:转载请注明出处 https://blog.csdn.net/xuyangxinlei/article/details/79630578
标题:迷宫

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{  
2.    static int ok = 0,res = 0;  
3.    static char road[][] = new char[][]{{'U','D','D','L','U','U','L','R','U','L'},  
4.        {'U','U','R','L','L','L','R','R','R','U'},  
5.        {'R','R','U','U','R','L','D','L','R','D'},  
6.        {'R','U','D','D','D','D','U','U','U','U'},  
7.        {'U','R','U','D','L','L','R','R','U','U'},  
8.        {'D','U','R','L','R','L','D','L','R','L'},  
9.        {'U','L','L','U','R','L','L','R','D','U'},  
10.        {'R','D','L','U','L','L','R','D','D','D'},  
11.        {'U','U','D','D','U','D','U','D','L','L'},  
12.        {'U','L','R','D','L','U','U','R','R','R'}};  
13.    static int cover[][] = new int[10][10];  
14.    public static void main(String[] args) {  
15.        // TODO Auto-generated method stub  
16.        for(int i=0;i<10;i++){  
17.            for(int k=0;k<10;k++){  
18.                ok = 0;  
19.                cover = new int[10][10];  
20.                dfs(i,k);  
21.                if(ok==1){  
22.                    res++;  
23.                    //System.out.println(i+","+k); 输出能走出迷宫的人的坐标,方便检查结果  
24.                }  
25.            }  
26.        }  
27.        System.out.println(res);  
28.    }  
29.    static void dfs(int x,int y){  
30.        if(x==-1||x==10||y==-1||y==10){  
31.            ok = 1;  
32.            return;  
33.        }  
34.        if(cover[x][y]==1) return;  
35.        cover[x][y] = 1;  
36.        if(road[x][y]=='U'){  
37.            dfs(x-1,y);  
38.        }  
39.        else if(road[x][y]=='D'){  
40.            dfs(x+1,y);  
41.        }  
42.        else if(road[x][y]=='L'){  
43.            dfs(x,y-1);  
44.        }  
45.        else if(road[x][y]=='R'){  
46.            dfs(x,y+1);  
47.        }  
48.    }  
49.}  

猜你喜欢

转载自blog.csdn.net/xuyangxinlei/article/details/79630578