蓝桥杯 - 穿越雷区

解题思路:

dfs

方法一:

import java.util.Scanner;public class Main {static char[][] a;static int[][] visited;static int[] dx = { 0, 1, 0, -1 };static int[] dy = { 1, 0, -1, 0 };static long min = Long.MAX_VALUE;static long count = 0;public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();a = new char[n][n];visited = new int[n][n];String str[] = new String[n];int startx = 0;int starty = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {a[i][j] = in.next().charAt(0);if (a[i][j] == 'A') {startx = i;starty = j;}}}dfs(startx, starty, n);if(min == Integer.MAX_VALUE) min = -1;System.out.println(min);}public static void dfs(int x, int y, int n) {visited[x][y] = 1;if (a[x][y] == 'B') {min = Math.min(min, count);return;}for (int i = 0; i < 4; i++) {int xx = x + dx[i];int yy = y + dy[i];if (xx >= 0 && xx < n && yy >= 0 && yy < n && a[xx][yy] != a[x][y] && visited[xx][yy] == 0) {count++;dfs(xx, yy, n);visited[xx][yy] = 0;count--;}}}}

方法二:

时间复杂度更低,不易超时

import java.util.Scanner;public class Main {static char[][] a;static int[][] visited;static int[] dx = { 0, 1, 0, -1 };static int[] dy = { 1, 0, -1, 0 };static int min = Integer.MAX_VALUE;static int n;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();a = new char[n][n];visited = new int[n][n];String str[] = new String[n];int startx = 0;int starty = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {a[i][j] = in.next().charAt(0);visited[i][j] = Integer.MAX_VALUE;if (a[i][j] == 'A') {startx = i;starty = j;}}}dfs(startx, starty, 0);if (min == Integer.MAX_VALUE)min = -1;System.out.println(min);}public static void dfs(int x, int y, int step) {visited[x][y] = step;if (a[x][y] == 'B') {min = Math.min(min, step);return;}for (int i = 0; i < 4; i++) {int xx = x + dx[i];int yy = y + dy[i];if (xx >= 0 && xx < n && yy >= 0 && yy < n && a[xx][yy] != a[x][y] && visited[x][y] + 1 < visited[xx][yy]) {dfs(xx, yy, step + 1);}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/594077.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java异常入门

目录 前言 异常 什么是异常 异常&#xff08;Exception&#xff09;和错误&#xff08;Error&#xff09; 异常的处理 异常的作用 前言 我们用一个简单情形引入异常&#xff1a; class Devide{public int divide(int a ,int b ){return a / b ;} }public class Main{pu…

myql join连接 全部

学习了mysql 连接查询和子查询&#xff0c;把连接查询的所有情况&#xff0c;做一个介绍。 1&#xff0c;数据&#xff1a; 部门数据&#xff1a; DROP TABLE IF EXISTS department; CREATE TABLE department (id int(11) NOT NULL AUTO_INCREMENT,deptName varchar(30) DEFAU…

【资源分享】-免费-的论文查重软件-论文照妖镜下载-使用教程

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

Python输出不了中文怎么解决

在文件头加上#encoding&#xff1a;utf-8即可。 # encoding: utf-8 print helloworld print u"学习" print (unicode("学习", encoding"utf-8")) shell输出&#xff1a; helloworld 学习 学习 还可以用#-*- coding: UTF-8 -*- 来指定。

C++--对象作为返回值-----拷贝构造函数不执行的问题解决方案

1.问题现象 本来func函数返回p1&#xff0c;实际上p1会先拷贝一份传递给test函数里面的p,这个时候会执行拷贝构造函数&#xff0c;但是实际上的输出并没有&#xff1b; 而且执行拷贝构造函数的时候&#xff0c;因为生成p1的副本&#xff0c;所以我们打印的地址应该不相同&…

数码管与译码器

目录 数码管 显示的基本原理 LED数码管的显示方式 静态显示方式 动态显示方式 具体案例 数码管静态显示 电路图 keil文件 数码管动态显示 电路图 keil文件 74LS138译码器 简介 译码表 译码器案例 电路图 keil文件 74HC595译码器 前言 举例解释 简单案例 …

可变参数模板

可变参数模板的概念 可变参数模板是C11新增的最强大的特性之一&#xff0c;它对参数高度泛化&#xff0c;能够让我们创建可以接受可变参数的函数模板和类模板。 在C98/03中&#xff0c;类模板和函数模板中只能包含固定数量的模板参数&#xff0c;可变模板参数无疑是一个巨大的…

我与C++的爱恋:类与对象(一)

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&…

EfficientVMamba实战:使用 EfficientVMamba实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

java中大型医院HIS系统源码 Angular+Nginx+SpringBoot云HIS运维平台源码

java中大型医院HIS系统源码 AngularNginxSpringBoot云HIS运维平台源码 云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务&#xff0c;提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站和护士工…

虚良SEO-蜘蛛池的作用与工作原理

蜘蛛池是一种SEO优化工具&#xff0c;其主要作用是吸引搜索引擎蜘蛛到特定网站进行爬行和索引&#xff0c;从而提高网站的可见性和排名。下面分别介绍蜘蛛池的作用和工作原理。 蜘蛛池的作用&#xff1a; 提高网站收录&#xff1a; 当一个网站新发布时&#xff0c;或者长时间…

Thread的基本用法

目录 正文&#xff1a; 1.线程创建 2.线程休眠 3.获取线程实例 4.线程中断 5.线程等待join() 总结&#xff1a; 正文&#xff1a; 1.线程创建 线程创建是多线程编程的第一步&#xff0c;它涉及到创建一个可以并行执行的新线程。在Java中&#xff0c;有几种不同的方法可…