习题:走迷宫2 (java bfs)

计蒜客 走迷宫(dfs) 题目: 给一个n行m列的2维迷宫,‘S’表示迷宫的起点,‘T’表示迷宫的终点,’#‘表示不能通过的点,’.‘表示可以通过的点。现在要求从’S’出发走到’T’,每次只能上下左右走动,并且只能进入能通过的点,每个点只能通过一次,现在要求你求出有多少种通过迷宫的方案。 输入格式: 第一行:n,m(1<=n,m<=10)表示迷宫的大小 接下来n行字符串表示迷宫 输出格式: 输入通过迷宫的方法... 阅读详情
package lanqiaobei;

import java.util.*;

/*
习题:走迷宫2

给你一个n行m列的二维迷宫。'S'表示起点,'T' 表示终点,'#' 表示墙壁,'.' 表示平地。你需要从 'S' 出发走到 'T',每次只能上下左右走动,并且不能走出地图的范围以及不能走到墙壁上。请你计算出走到终点需要走的最少步数。
输入格式
第一行输入n, m表示迷宫大小。(1≤n,m≤100)
接下来输入n行字符串表示迷宫,每个字符串长度为m。(地图保证有且仅有一个终点,一个起始点)
输出格式
输出走到终点的最少步数,如果不能走到终点输出−1,占一行。
样例输入1
2 3
S.#
..T
样例输出1
3
样例输入2
3 3
S.#
.#.
.#T
样例输出2
-1
 */

public class ZouMIGong_bfs {
    public static List<point> a = new ArrayList<>();
    static point up = new point(0, 1);
    static point down = new point(0, -1);
    static point left = new point(-1, 0);
    static point right = new point(1, 0);
    public static int ress = -1;

    public static void bfs(int sx, int sy, char[][] dt) {
        // (sx, sy)为搜索的起点
        //res存放sx,sy到循环的当前nx,ny的步数
        int[][] res = new int[dt.length][dt[0].length];
        a.add(up);
        a.add(down);
        a.add(left);
        a.add(right);
        //队列来进行while循环进行层搜索用的
        Queue<point> q = new LinkedList();
        ((LinkedList) q).add(new point(sx, sy));
        //一层一层的搜索bfs
        while (!q.isEmpty()) {
            //获取并移除当前对列队头的元素并赋值
            point newp = q.poll();
            int x = newp.x;
            int y = newp.y;
            //只能向上下左右四个方向进行移动
            for (int i = 0; i < a.size(); i++) {
                point sum = a.get(i);
                int nx = x + sum.x;
                int ny = y + sum.y;
                //判断是否在当前的界限内
                if (nx >= 0 && nx < dt.length && ny >= 0 && ny < dt[0].length) {
                    //判断是否能到达
                    if (dt[nx][ny] != '#' && dt[nx][ny] != '!') {
                        //判断当前层中是否有能到达T的,是否结束
                        if (dt[nx][ny] == 'T') {
                            ress = res[x][y] + 1;
                            return;
                        } else {
                            //设置上标志位
                            dt[nx][ny] = '!';
                            //从x,y到nx,ny的步数加一
                            res[nx][ny] = res[x][y] + 1;
                            //放在队列中
                            ((LinkedList<point>) q).push(new point(nx, ny));
                        }
                    }
                }
            }
        }

    }

    public static void main(String[] args) {
        ZouMIGong_bfs a = new ZouMIGong_bfs();
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        int sx=0;
        int sy=0;
        char[][] dt = new char[x][y];
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                dt[i][j] = sc.next().charAt(0);
                if (dt[i][j]=='S'){
                 sx=i;
                 sy=j;
                }
            }
        }
        a.bfs(sx,sy,dt);
        System.out.println(ress);
    }

}

 

Java实现迷宫最短路径的BFS算法 利用广度优先遍历算法的特点,由于迷宫每次只能走一格,所以对于任意一个节点,bfs最先到达时一定时最短路径。 package recursion; import java.util.ArrayDeque; import java.util.Deque; import java.util.Stack; public class Maze { private class Node{ int x... 阅读详情

相关推荐

[Java编程]迷宫问题(BFS)

给定一个大小为 N×M 的迷宫。迷宫由通道和障碍组成(0为可以通过,1为障碍),每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的最小步数,题目保证一定有解。 import java.util.*; public class Main { public static void main(String[] args) { int[][] tab = { ...

食鱼酱的博客 5096

DFS:迷宫搜索实践

有一个二维迷宫,n行m列,‘s’表示迷宫的起点,‘T’表示迷宫的终点,‘#’表示围墙,‘.’表示通路。现在从S出发,你不能穿墙,问你能否到达终点,若能将路线打印出来,若不能打印“no”整两中本质是一样的,因此时间复杂度都是一样的,但后者代码量少一些。第一行输入n,m(1

m0_73731708的博客 308

强网杯Web题ezphp解题全记录:利用PHP反序列化与条件竞争拿下服务器

本文详细解析了强网杯Web题目ezphp的解题过程,通过PHP反序列化与条件竞争漏洞的组合利用,成功获取服务器权限。文章深入剖析了反序列化链的构造、文件上传绕过技巧以及条件竞争的实际应用,为CTF选手和Web安全研究者提供了宝贵的实战经验。

weixin_29006187的博客 389

走迷宫(bfs)

给你一个 n 行 m 列的二维迷宫。'S'表示起点,'T' 表示终点,'#' 表示墙壁,'.' 表示平地。你需要从 'S' 出发走到 'T',每次只能上下左右走动,并且不能走出地图的范围以及不能走到墙壁上。请你计算出走到终点需要走的最少步数。输入格式第一行输入 nnn, mmm 表示迷宫大小。(1≤n,m≤100)(1 \leq n,m \leq 100)接下来输入 nnn 行字符串表示迷宫,每...

我自关山点酒,千秋皆入喉 869

windows11 远程桌面连接 通过代理连接RDP桌面报错 错误代码0x904 拓展错误代码0x7

打开windows Defender防火墙设置--允许应用通过防火墙更改设置--允许其他应用浏览--进入C:\WINDOWS\system32目录选择mstsc.exe进入C:\Windows\SysWOW64目录h'qmstsc.exe添加后列表里多了一个远程桌面连接,还有一个Remote Desktop Connection,配置网络权限后保存连接成功。

weixin_43978891的博客 1万+

企业级AI Agent平台建设方案

本报告将深入剖析构成一个顶级AI Agent平台的各个功能层面,为构建者提供一份全面的战略蓝图。

分享AI和大数据领域的知识和研究 1589

走迷宫 路径最短

习题:走迷宫2   消息加载请求中... 您暂时没有新的消息 查看全部消息 习题:走迷宫2 给你一个n行m列的二维迷宫。'S'表示起点,'T' 表示终点,'#' 表示墙壁,'.' 表示平地。你需要从 'S' 出发走到 'T',每次只能上下左右走动,并且不能走出地图的范围以及不能走到墙壁上。请你计算出走到终点需要走的最少步数。 输入格式 第一行输入n, m表示迷宫大小。(1

qq601349586的博客 375

从理论到实践:笛卡尔空间阻抗控制的实现挑战与变体解析

本文深入探讨了笛卡尔空间阻抗控制的核心原理、工程实现中的五大挑战及经典变体实战解析。通过详细的数学建模和实际案例分析,揭示了阻抗控制在工业机器人、医疗设备等领域的应用价值,特别是在力感知精度、动力学模型校准和实时计算等方面的关键技术突破。

weixin_30952535的博客 449

习题:走迷宫(java回溯dfs)

package lanqiaobei; import java.util.Scanner; /* 习题:走迷宫 给一个n行m列的2维的迷宫,'S'表示迷宫额起点,'T'表示迷宫的终点,'#'表示不能通过的点,'.' 表示可以通过的点。你需要从'S'出发走到'T',每次只能上下左右走动,并且只能进入能通过的点,每个点只能通过一次。现在要求你求出有多少种通过迷宫的的方案。 输入格式 第一行输入n...

pioneer的博客 1505

基于Keil软件实现对射式红外传感器计次 (江协科技HAL库)

用HAL库复现江协科技,让嵌入式学习之路更顺畅。

2401_82728381的博客 800

056:vue+openlayers 风场快速移动效果(图文代码)

本示例的目的是介绍演示如何在vue+openlayers中使用wind插件来实现风场快速移动的效果。

大剑师兰特的GIS世界 1583

BFS-走迷宫问题-java

​ BFS叫做广度优先搜索算法,通过BFS来实现一个走迷宫问题。 ​

m0_63267251的博客 1961

Allegro Design Entry HDL(OrCAD Capture HDL)原理图是设计快速入门图文教程

Allegro Design Entry HDL是Cadence公司开发的原理图设计工具,也可与Allegro PCB设计工具无缝对接,虽然板级开发中不如Design Entry CIS(又名 OrCAD Capture CIS)的使用那么广泛,但是由于Design Entry HDL支持芯片的开发,所以有不少公司尤其是芯片背景公司,选择使用Design Entry HDL进行原理图设计。两个原理图开发工具的使用方法大同小异,本文简单介绍使用Allegro Design Entry HDL开始一个新的设计,

fydar的博客 4134

BFS广搜解决迷宫问题java实现

目录 1.例题 题目描述 输入 输出 测试数据 2. 思路分析 基本思想 具体步骤 代码实现 3.BFS小结 求解思路: 注意 1.例题 题目描述 迷宫由 n 行 m 列的单元格组成,每个单元格要么是空地,要么是障碍物。其中1表示空地,可以走通,2表示障碍物。给定起点坐标startx,starty以及终点坐标endx,endy。现请你找到一条从起点到终点的最短路径长度。 输入 第一行包含两个整数n,m(1<=n,m<=1000)。接下来 n 行,每行包含..

专注Spring、SSM、数据结构与算法、蓝桥杯领域创作者 4993

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

BFS进阶——大胖子走迷宫

注意我们题目中说了,我可以原地不动,所以我要把这种走法考虑进去,而我原地不动的目的其实是为了消耗脂肪,变成比原来更小的体积,如果我体积已经是1*1了那么我没必要做这个操作,所以我有一个判断,t是走到这一步过去的时间,如果它大于等于k的2倍其实就是说明他已经变成了1*1,所以只有。那么判断范围就变成了(x-0,y-0)到(x+0,y+0),其实就是只判断(x,y)。下一阶段,经过了t时刻,它的体积会变成3*3的大小,此时我们要判断的其实就是下一个要走的格子以及它的上下左右一步内的邻居都要判断,即。

qq_53237241的博客 1109

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java可视化,实现走迷宫小游戏(包含随机迷宫生成、BFS自动寻找迷宫解)

java

如切如磋,如琢如磨 2373

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

基于Java Swing的迷宫生成与走迷宫游戏(2)

本项目实现了一个迷宫生成与走迷宫游戏,采用分层架构设计,包含界面层、算法层、工具层和逻辑层。系统支持三种迷宫生成算法(DFS、Prim、Kruskal),使用三维布尔数组存储迷宫墙信息,并实现了BFS路径校验确保游戏可玩性。界面采用BorderLayout布局,包含迷宫绘制面板、算法选择等功能模块。测试表明程序在多种环境下运行稳定,迷宫生成速度快(<100ms),角色移动流畅。关键代码包括主窗口初始化、迷宫绘制、DFS算法实现、并查集数据结构和角色移动控制等模块,体现了面向对象设计原则。

m0_66818464的博客 707

【笔试强训】(红与黑,五子棋,走迷宫)DFS+BFS算法解析

(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法。本文就以习题的方式来给大家讲解 DFS 和 BFS。深度优先遍历主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底… 不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。

xyk:的博客 1480

bfs之走迷宫

bfs之走迷宫图解加详解

Rockivy的博客 554

BFS(广度优先搜索,走迷宫问题)

广度优先遍历以及走迷宫问题

HBR666_的博客 736

bfs和dfs走迷宫

迷宫: 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 010000000010101000110100001010000010101010...

qq_43463117的博客 683

BFS 遍历迷宫 JAVA 输出所有路径

import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack; public class MiGong { public static void main(String[] args) { int[][] A={ {0,0,1,0}, {1,0,1,0},.

weixin_42649617的博客 1516

迷宫问题Java实现(BFS和DFS)

迷宫问题 迷宫问题算是经常会碰到的,类似于下图,这是一个5x5的迷宫,这里数字1代表可以走的路,数字0代表不可以走的路,从(0,0)到(4,4)显然有两条路径。 1, DFS求迷宫路径 DFS(Depth-First-Search,深度优先搜索),顾名思义总是选择深度大的节点去访问,下面的图是一个二叉树,如果从头结点F开始深度优先遍历,若访问了C则下一个节点不可能是E,因为C和E的深度是一样的,违...

qq_37438740的博客 3334

计蒜客 走迷宫2 BFS

#include<iostream> #include<cstdio> #include<stdio.h> #include<algorithm> #include<string.h> #include<queue> using namespace std; const int maxn = 110; struct node{ int x,y; int deep; }Node; int X[4] = {0,0,1,-1}; int

休的博客 785
上一篇: 习题:踏青(dfs java)
下一篇: 习题:一维坐标的移动(bfs java)
ArchitectDream
博客等级 码龄9年 48粉丝 288原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值