美文网首页
第八届蓝桥杯 迷宫 Java A组

第八届蓝桥杯 迷宫 Java A组

作者: elijahzheng | 来源:发表于2018-04-02 16:41 被阅读0次

    标题:迷宫

    X星球的一处迷宫游乐场建在某个小山坡上。
    它是由10x10相互连通的小房间组成的。

    房间的地板上写着一个很大的字母。
    我们假设玩家是面朝上坡的方向站立,则:
    L表示走到左边的房间,
    R表示走到右边的房间,
    U表示走到上坡方向的房间,
    D表示走到下坡方向的房间。

    X星球的居民有点懒,不愿意费力思考。
    他们更喜欢玩运气类的游戏。这个游戏也是如此!

    开始的时候,直升机把100名玩家放入一个个小房间内。
    玩家一定要按照地上的字母移动。

    迷宫地图如下:

    UDDLUULRUL
    UURLLLRRRU
    RRUURLDLRD
    RUDDDDUUUU
    URUDLLRRUU
    DURLRLDLRL
    ULLURLLRDU
    RDLULLRDDD
    UUDDUDUDLL
    ULRDLUURRR


    请你计算一下,最后,有多少玩家会走出迷宫?
    而不是在里边兜圈子。

    请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。

    如果你还没明白游戏规则,可以参看一个简化的4x4迷宫的解说图:


    迷宫

    思路

    深度搜索 ,跟着箭头的字母方向寻找,直到走出数组下标为-1 |10 | 重复自身位置为止。

    代码

    
    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[]) {
            for (int i=0; i<10; i++) {
                for (int j = 0;j <10; j++) {
                    cover = new int[10][10];
                    ok = 0;
                    dfs(i,j);
                    if (ok == 1) {
                        res ++;
                    }
                }
            }
            
            System.out.println(res);
        }
        
        static void dfs(int i, int j) {
            if (i == -1 | i == 10 | j == -1 | j == 10) {
                ok = 1;
                return;
            }
            if (cover[i][j] == 1) return;
            cover[i][j] = 1;
            if (road[i][j] == 'U') {
                dfs(i -1, j);
            }
            
            if (road[i][j] == 'D') {
                dfs(i + 1, j);
            }
            
            if (road[i][j] == 'L') {
                dfs(i, j - 1);
            }
            
            if (road[i][j] == 'R') {
                dfs(i , j + 1);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:第八届蓝桥杯 迷宫 Java A组

          本文链接:https://www.haomeiwen.com/subject/qtsxhftx.html