第八届蓝桥杯Java A组第一题迷宫题解

12 篇文章 0 订阅
12 篇文章 0 订阅

题目描述

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

UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR

请你计算一下,最后,有多少玩家会走出迷宫?
而不是在里边兜圈子。
请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。
如果你还没明白游戏规则,可以参看一个简化的4x4迷宫的解说图:

题目解析:

这道题难度应该不算大,简单的dfs深搜题,需要注意的是在dfs函数中我们需要先考虑边界情况然后根据当前的字母来判断接下来应该往哪个方向走,在这里我们继续调用dfs函数即可,在主函数中,输入二维字符数组采用固定的套路用toCharArray进行转换。因为本题没有初始的起点,所以在主函数里我们通过两层循环一个点一个点的进行遍历深搜,最后得出结果。

参考代码:

import java.util.Scanner;

/**
  * 迷宫探索
 * @author autumn_leaf
 * @Date 2019/03/23
 */
public class ExploreMazes {
	
	static char[][] maze = new char[11][11];
	static int[][] vis = new int[10][10];
	static int ans = 0;
	
	//深搜函数
	static void dfs(int i,int j) {
		//走到了边界
		if(i==-1 || i==10 || j==-1 || j==10) {
			ans++;
			return;
		}
		if(vis[i][j] ==1)
			return ;
		vis[i][j] = 1;
		char ch = maze[i][j];
		//上下左右四个方向
		if(ch == 'U')
			dfs(i-1,j);
		if(ch == 'D')
			dfs(i+1,j);
		if(ch == 'L')
			dfs(i,j-1);
		if(ch == 'R')
			dfs(i,j+1);
	}

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		//输入二维字符数组
		for(int i=0; i<10; i++) {
			String temp = sc.nextLine();
			maze[i] = temp.toCharArray();
		}
		for(int i=0; i<10; i++) {
			for(int j=0 ;j<10; j++) {
				//初始化
				vis = new int[10][10];
				dfs(i,j);
			}
		}
		System.out.println(ans);
	}

}

最终得到的结果为:31

好了,本题题解就到这里了,有疑惑的同学可以在下方评论区留言哦!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值