蓝桥杯2017初赛 迷宫 DFS

大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn


蓝桥杯2017初赛 迷宫

题目描述

X星球的一处迷宫游乐场建在某个小山坡上。它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,R表示走到右边的房间,U表示走到上坡方向的房间,D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。
迷宫地图如下:

UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR

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

输出

输出一个整数表示答案

分析

典型深搜,访问过就标记下,如果已经遍历过就直接返回。注意上下左右的坐标变化

/*
 * @Author: motongxue
 * @Date: 2020-09-26 19:07:50
 * @LastEditors: motongxue
 * @LastEditTime: 2020-09-26 19:37:20
 * @Blog: https://motongxue.cn
 * @Description: file content
 */
import java.util.Scanner;

public class Main {
    static int ans = 0;
    static char[][] a = new char[11][11];
    static boolean[][] vis = new boolean[11][11];

    static void DFS(int i, int j) {
        if (i < 0 || j < 0 || i > 9 || j > 9) {
            ans++;
            return;
        }
        if (vis[i][j] == true)
            return;
        vis[i][j] = true;
        if (a[i][j] == 'L')
            DFS(i, j - 1);
        if (a[i][j] == 'U')
            DFS(i - 1, j);
        if (a[i][j] == 'R')
            DFS(i, j + 1);
        if (a[i][j] == 'D')
            DFS(i + 1, j);
    }

    static void init()// 对vis初始化
    {
        for (int i = 0; i < 10; i++)
            for (int j = 0; j < 10; j++)
                vis[i][j] = false;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int i, j;
        for (i = 0; i < 10; i++)
            a[i] = sc.nextLine().toCharArray();
        for (i = 0; i < 10; i++)
            for (j = 0; j < 10; j++) {
                init();// 每次都初始化
                DFS(i, j);
            }
        System.out.println(ans);
        sc.close();
    }
}


2020年9月26日更

大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn


©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页