蓝桥杯 - 穿越雷区

news/2024/7/20 20:41:35 标签: 蓝桥杯, 算法, 深度优先, java

解题思路:

dfs

方法一:

java">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--;
            }
        }

    }

}

方法二:

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

java">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.niftyadmin.cn/n/5470792.html

相关文章

Visual Studio中搭建QT环境

一、前言 在学习QT的时候&#xff0c;一般用的是QCreator&#xff0c;使用它很方便&#xff0c;有各种帮助和提示。但是需要处理大型项目、利用企业级IDE特性、深入集成到Microsoft开发工作流中&#xff0c;或者同时进行多种类型项目开发&#xff0c;Visual Studio结合Qt插件会…

ChatGPT 与 OpenAI 的现代生成式 AI(上)

原文&#xff1a;Modern Generative AI with ChatGPT and OpenAI Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 本书以介绍生成式 AI 领域开始&#xff0c;重点是使用机器学习算法创建新的独特数据或内容。它涵盖了生成式 AI 模型的基础知识&#xff0c…

理解数学概念——整函数(复平面可积函数)

1. 提出问题 在复分析中&#xff0c;出现一个概念“entire function”,在汉译的一些数学资料和一些数学术语辞典中&#xff0c;将这个术语译为“整函数”。为什么这样翻译?只因“entire”这个单词具有“整体、完全”的词义。但这样翻译是非常不严谨的&#xff0c;也没有体现出…

团体程序设计天梯赛-练习集 01

天梯赛题解合集 团体程序设计天梯赛-练习集 (L1-001 - L1-012) 团体程序设计天梯赛-练习集 (L1-013 - L1-024) 团体程序设计天梯赛-练习集 (L1-025 - L1-036) 团体程序设计天梯赛-练习集 (L1-037 - L1-048) L1-001 Hello World 输出题 样例 输入 输出 Hello World!思…

linux练习-交互式传参

在shell脚本中&#xff0c;read 向用户显示一行文本并接受用户输入 #!/bin/bash read -p 依次输入你的姓名、年龄、家乡 name age home echo 我是$name,年龄$age,我来自$home

吃豆豆 经典的区间DP 好题典题

这里很巧妙的注意一点是&#xff0c;你最后要把所有的豆子都吃掉&#xff0c;所以你只要看你多增加的尽量的少就好了 然后维护一段区间&#xff0c;表示的是吃掉这段区间里面的所有豆子的最小代价&#xff0c;然后发现最后一个是左端点或者右端点 你吃一段新的区间的同时会把…

在 QML 中,ComboBox 是一种常用的用户界面控件,通常用于提供一个下拉式的选择框,允许用户从预定义的选项列表中选择一个值

ComboBox 详解&#xff1a; 以下是 ComboBox 的一些重要属性和特性&#xff1a; model: 用于指定 ComboBox 中的选项列表&#xff0c;可以是一个数组、列表、模型或者其他可迭代的数据结构。 editable: 用于指定是否允许用户编辑 ComboBox 中的文本输入框&#xff0c;以便输入…

Qt | Qt 快速入门(零基础)

01 Qt 简介 1、Qt 是一个跨平台的 C++图形用户界面库,说简单点,Qt 的本质就是一个 C++类库,使用Qt 就是怎样使用 Qt 类库中的类及其类中的成员函数的问题。在 QT5 中 QML(这是一种声明性语言)和 Qt Quick 成为 Qt 的核心之一,但 C++仍是 QT 的核心。 2、Qt 是跨平台的,也…