POJ3984(BFS)

POJ3984迷宫问题(BFS入门+记录路径) 问题:传送门 关于BFS算法: 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 题目分析: ... 阅读详情

POJ3984(BFS)


迷宫问题

Description

定义一个二维数组:

int maze[5][5] = {

	0, 1, 0, 0, 0,

	0, 1, 0, 1, 0,

	0, 0, 0, 0, 0,

	0, 1, 1, 1, 0,

	0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
题意

略。

思路

使用BFS从(0,0)开始搜索,用队列记录搜索的过程,直到右下角(4,4),输出路径即可。

代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Maze {

  int[][] map = new int[5][5];//迷宫地图
  int[][] direction = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};//四个方位
  int[][] visit = new int[5][5];//记录是否已经访问过
  List<Node> queue = new ArrayList<Node>();//队列

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    Maze maze = new Maze();


    for (int i = 0; i < 5; i++) {
      for (int j = 0; j < 5; j++) {
        maze.map[i][j] = sc.nextInt();
        maze.visit[i][j] = 0;
      }
    }

    maze.bfs(0, 0, 4, 4);
    maze.print(maze.queue.size() - 1);

  }

  public void bfs(int startX, int startY, int endX, int endY) {

    visit[startX][startY] = 1;

    Node node = new Node();
    node.setX(startX);
    node.setY(startY);
    node.setPre(-1);
    queue.add(node);
    int rear = 1;//队尾
    int front = 0;//队头

    while (front < rear) {//对列不为空
      for (int i = 0; i < 4; i++) {//遍历上下左右4个方位的点
        int nextX = queue.get(front).getX() + direction[i][0];
        int nextY = queue.get(front).getY() + direction[i][1];
        if (nextX < 0 || nextX >= 5 || nextY < 0 || nextY >= 5 || visit[nextX][nextY] == 1 || map[nextX][nextY] == 1) {
          //是否在迷宫内,是否已访问过,是否是墙壁。
          continue;
        }
        Node tmp = new Node();
        tmp.setX(nextX);
        tmp.setY(nextY);
        tmp.setPre(front);
        queue.add(tmp);
        rear++;
        visit[nextX][nextY] = 1;
        if (nextX == endX && nextY == endY) {
          return;
        }
      }
      front++;//出队
    }

  }

  public void print(int now) {
    if (queue.get(now).getPre() == -1) {
      System.out.println("(" + queue.get(now).getX() + ", " + queue.get(now).getY() + ")");
    } else {
      print(queue.get(now).getPre());
      System.out.println("(" + queue.get(now).getX() + ", " + queue.get(now).getY() + ")");
    }
  }

  static class Node {
    private int x;
    private int y;
    private int pre;

    public int getX() {
      return x;
    }

    public int getY() {
      return y;
    }

    public int getPre() {
      return pre;
    }

    public void setX(int x) {
      this.x = x;
    }

    public void setY(int y) {
      this.y = y;
    }

    public void setPre(int pre) {
      this.pre = pre;
    }
  }
}
【算法】【题解】- POJ - 3984 迷宫问题(BFS入门例题) BFS入门例题 迷宫问题 题目描述: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input... 阅读详情

相关推荐

leetcode打不开-codeBook:为了好玩,永远

leetcode打不开密码本 为了好玩,永远 poj 的代码。 所有 C++ 代码。 bfs.cpp:我的 poj 3984 解决方案。最短路径的 BFS,并递归地追溯路径。 解决这个问题我想起了很多:如何定义mutli-dim vector,如何定义队列,如何定义struct数组,如何定义方向,如何编写BFS,如何跟踪路径。 请注意,BFS 本身不是递归实现的(相反,DFS 通常以递归方式实现)。 unionSet.cpp:我的 poj 2524 解决方案。Union Set 的简单应用。 我记得我们准备 ACM/ICPC 比赛的那段时间。 我重新学习了如何实现联合集:makeSet、findSet、unionSet。 两个关键点:通过查找操作为即将到来的对进行并集时沿跟踪路径更新根节点(压缩路径); 将两个子集按等级合并(按合并)。 binSearch.cpp:我为二进制搜索编写了示例代码。 找到目标时记得完成while循环。 dfs.cpp:一个 poj 问题 (3050)。 DFS 非常常用。 记住 dfs 之后的回溯。 这里我们不需要像 BFS 那样使用 used 来记住访问

POJ 3984 迷宫问题 (DFS(深度优先搜索))

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6322   Accepted: 3673 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,

公众号:ByteCode 2177

从数据手册到代码:一步步解读SC7A20寄存器配置与加速度值换算原理

本文详细解析了SC7A20三轴加速度传感器的寄存器配置与加速度值换算原理。从数据手册出发,逐步拆解关键寄存器设置,并推导原始ADC值到物理加速度的完整换算过程,帮助开发者深入理解传感器底层工作原理,提升嵌入式开发效率。

weixin_29179311的博客 366

POJ-3984-迷宫问题

这题是bfs的基础性题目,但是基础才显得很重要。 题目中的要求是输出每一个我们走过的点,所以我们每次记录下它的上一个节点是谁就行了。 但是我们因此就不能再使用队列了,我们开辟一个一维数组就行了,因为迷宫的大小是5*5的,所以我们直接开一个一维数组,然后模拟一下队列的进出就行了。 这个题比较坑的一点是它的输出圆括号里面,逗号后面有个空格,一定要输出,不然它会说,你的答案几乎正确,但是格式不对。...

XYQ BLOG 1668

避坑指南:STM32CubeMX安装后,你的第一个工程为什么中文全是乱码?

本文详细解析了STM32CubeMX安装后中文乱码问题的根源及解决方案。从诊断乱码现象到分析编码冲突背景,提供了新项目UTF-8化、旧项目GBK兼容及版本降级等多种实用方案,帮助开发者彻底解决这一常见问题。

weixin_30699955的博客 474

URScript介绍

优傲机器人(Universal Robots)是丹麦工业协作机器人制造商,2005年成立,2015年被泰瑞达收购。其自研编程语言URScript基于Python语法,专为机器人控制优化,支持运动指令、IO控制等功能,具有类Python的简洁语法和实时性特点。URScript提供丰富的API,支持变量赋值、条件判断、循环及函数定义等编程结构,参数按值传递。用户可通过该语言在Polyscope界面编写程序,实现自动化任务。目前优傲在全球20多个办事处为多国客户提供服务。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 603

POJ3984(BFS+路径还原)

package adv; import java.util.ArrayDeque; import java.util.Scanner; /** * Poj3984迷宫问题 * BFS+路径还原 */ public class POJ3984 { static int T,n,m,ans; static int startx,starty,endx,endy; static int[][] map; static boolean[][] flag; static int[][] dir .

抖擞精神 354

Docker网络教程(四)macvlan 网络教程

在这种网络下,Docker 宿主机在它的IP之上,允许接受多个 MAC 地址的请求,然后再将这些请求路由至对应的容器里。流通,Docker 会用它的 MAC 地址,把流量路由进你的容器里。对于网络上的网络设备来说,你的容器似乎是物理上连接到网络上的。),Docker使用其MAC地址将流量路由到你的容器。对于网络上的网络设备来说,你的容器似乎是物理上连接到网络上的。你需要 3.9 或者更高版本的 Linux 内核,4.0 以及以上的版本是更好的。如果你的设备叫别的名字,用对应的名字代替。

weixin_42445065的博客 4132

POJ3984(迷宫问题)

迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input 一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。 Output 左上角到右下角的最短路径,格式如样例所示

weixin_43808717的博客 607

从NHANES到发表:如何用survey包完成符合CDC要求的统计分析(含完整R代码)

本文详细介绍了如何利用R语言的survey包,对美国国家健康与营养调查数据进行符合CDC要求的统计分析。文章重点解析了NHANES数据的复杂抽样设计、权重变量的正确选择与调整,并提供了从数据获取、清洗、构建调查设计对象到执行加权回归及生成发表级表格的完整R代码实战指南,帮助研究者避免常见错误,确保分析结果的准确性与可发表性。

weixin_29054245的博客 521

JS逆向-B站评论数据w_rid参数和wts参数

本文是该专栏的第69篇,后面会持续分享python爬虫干货知识。本文以B站的评论数据为例,通过JS逆向获取其中的w_rid参数以及wts参数生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 2048

POJ3984(记录路径的BFS)

POJ3984 思路 用一个pre数组存储这个点的上一个点 ##AC代码 #include<iostream> #include<cstdio> #include<queue> #include<cstring> #define inf 0x3f3f3f3f //#define int long long using namespace std; typedef pair<int, int> PII; const int N = 10 + 1e5,

weixin_58110654的博客 172

NVIDIA Isaac Sim scene_synthesizer 创建机器人操控任务场景使用教程

【摘要】Scene Synthesizer是一个用于3D场景程序化生成的Python库,专为机器人仿真训练设计。文章介绍了其安装方法(pip或git)和核心概念:1) 资产(Asset)系统支持多种3D模型格式和参数化尺寸调整;2) 场景(Scene)管理通过有向无环图组织对象,支持基于锚点的层级合成;3) 提供了丰富的程序化资产(如橱柜、货架、餐具等)和6个预定义厨房场景。该库采用仿真器无关架构,强调物理仿真的多样性和扩展性,相比现有数据集和生成模型能创建更复杂的交互场景,适用于机器人操作任务训练。

机器人控制与仿真应用 1151

bfs解决poj3984迷宫问题

poj3984迷宫问题 题目链接 题目叙述 给定一大小为5*5的数组,数组元素由0,1组成,0表示可以通过,1表示为墙壁,不可通过,而且只能向上,向下,向左,向右行走,现要求从(0,0)位置到(4,4)位置的最短路径。 解题思路 首先,求最短路径问题,很明显可以用到宽度优先搜索bfs,从(0,0)点开始,走四面可以走的路,然后再从这些路,找继续可以往下走的路,直到最先找到了一条路径可以走到(4,4)点,这里需要用到队列queue去储存从所在点的位置走一步可以到达的点,(在走的时候,需要注意坐标x,y都要在

weixin_43966538的博客 523

Vue Vben Admin 登录页修改全攻略:从登录界面定制到接口对接全流程配置

方式一:修改国际化文件找到对应的语言包文件,修改和的值。方式二:直接传递文本page-description="现代化的后台管理系统模板"page-title="欢迎使用 Vue Vben Admin"从上面的代码可以看出,登录表单使用了的方式来定义表单字段,这种方式提供了极大的灵活性。如果你想要自定义表单,可以修改formSchema数组。如果你的登录需求非常特殊,现有的组件无法满足,你可以完全自定义表单。只需在login.vue中替换<template><h2>自定义登录</h2>

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 479

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

POJ3984 迷宫问题【BFS】

题目大意: 用一个5*5的二维数组表示迷宫,输出左上角到右下角的最短路径。 思路: 用BFS求最短路径。用pre[]来记录每个状态之前的状态,然后递归输出路径。

程序员充电站(itcharge) 3435

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

bfs+路径保存 poj3984

bfs+路径保存 #include<iostream> #include <queue> #include <cstring> using namespace std; typedef struct nodee { int x; int y; int step; }node; int sz[2][4] = {0,1,0,-1,1,0,-1...

时夜2333的农场 1353

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

poj3984-迷宫问题(BFS)

# include # include int map[5][5]; int dir[4][2]={1,0,-1,0,0,1,0,-1}; struct node { int x,y; };struct node queue[33],record[5][5]; void bfs() { int head,tail,i; struct node cur,nex

Griffin_0的专栏 433

POJ - 3984 迷宫问题 【BFS】

题目链接 http://poj.org/problem?id=3984 思路 因为要找最短路 用BFS 而且 每一次 往下一层搜 要记录当前状态 之前走的步的坐标 最后 找到最短路后 输出坐标就可以了 AC代码 #include <cstdio> #include <cstring> #include <c...

dianxi0949的博客 91

迷宫问题 (POJ - 3984 ,BFS + 路径输出)

一.题目链接: POJ-3984 二.题目大意: 给出一个迷宫,输出路径. 三.分析: 初学 bfs 的小伙伴在入坑 bfs 后,终于学会了判断迷宫问题是否能够到达终点。 那么, 现在又迎来了一个新的问题 —— 若迷宫的解唯一, 那么怎样输出迷宫路径呢 ? 比如 poj 3984 迷宫问题 在 AC 之后, 写这篇博客不仅是为了供大家学习,斧正, 更是为了自身的总结, 吸取教训。 ...

The___Flash的博客 1923

POJ3984 迷宫问题 BFS

<br />Problem Address:http://poj.org/problem?id=3984<br /> <br />求迷宫的最短路径。<br /> <br />本来是打算试一下怎么求迷宫的,结果最后做出来了。<br /> <br />BFS搜索,同时记录到达每一步的最小步数。<br /> <br />输出路径时则向前递归。<br /> <br />一次RTE后改大数组,然后AC。然后就不改了,直接保存……<br /> <br />如此凌乱的代码啊……不堪入目啊……<br /> <br />也正

Human_CK的专栏 983

POJ3984迷宫问题(BFS+队列+栈)

POJ-3984-迷宫问题 http://poj.org/problem?id=3984 大概思路:进行普通的BFS,用队列来操作。在保存路径的时候,可以用栈来输出路径,利用先进后出的特性。

Seawindson的博客 1680

POJ 3984 迷宫问题(bfs)

嗯... 题目链接:http://poj.org/problem?id=3984 这道题属于bfs + 记录路径,在bfs的模板上需要有些更改: bfs求最短路径有一个优点就是求出来的第一条路径就是最短路径,这与bfs的性质有关... 首先要记录路径的长度,然后要记录每次决策的方向...最后输出时从起点开始将记录下来的决策走一遍然后接着输出即可... AC代...

weixin_30426065的博客 56

POJ 3984 迷宫问题【迷宫最短路径 bfs】

POJ 3984 【迷宫最短路径 bfs】 题目链接 http://poj.org/problem?id=3984 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXL = 10; // 矩阵最大宽度 char maze[MAXL][MAXL]; // 迷宫 bool v

... 450
上一篇: POJ3414(BFS)
下一篇: POJ1111(DFS)
shui2104
博客等级 码龄10年 22粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值