POJ-3984-迷宫问题(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
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) 路径记录方式:dir[x][y]数组记录方向UDLR,然后逆向记录下路径 代码:
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Scanner;
class Node{
int x;
int y;
public Node(int x,int y){
this.x=x;
this.y=y;
}
}
public class Main{
static final int N=10;
static int map[][]=new int[N][N];
static char dir[][]=new char[N][N];
static ArrayDeque<Node> q=new ArrayDeque<Node>();
static int dx[]={0,0,1,-1};
static int dy[]={1,-1,0,0};
static boolean flag=false;
static void bfs(){
map[0][0]=1;
q.offer(new Node(0,0));
while(!q.isEmpty()){
Node t=q.poll();
for(int i=0;i<4;i++){
int xx=t.x+dx[i];
int yy=t.y+dy[i];
if(xx<0||yy<0||xx>=5||yy>=5||map[xx][yy]==1) continue;
map[xx][yy]=1;
q.offer(new Node(xx,yy));
if(i==0){
dir[xx][yy]='R';
}
else if(i==1){
dir[xx][yy]='L';
}
else if(i==2){
dir[xx][yy]='D';
}
else{
dir[xx][yy]='U';
}
if(t.x==4 && t.y==4){
flag=true;
break;
}
}
if(flag) break;
}
ArrayList<Node> v=new ArrayList<Node>();
int i=4,j=4;
while(i!=0 ||j!=0){
v.add(new Node(i,j));
if(dir[i][j]=='R'){
j=j-1;
}
else if(dir[i][j]=='L'){
j=j+1;
}
else if(dir[i][j]=='D'){
i=i-1;
}
else{
i=i+1;
}
}
System.out.println("(0, 0)");
for(int k=v.size()-1;k>=0;k--){
Node s=v.get(k);
System.out.println("("+s.x+", "+s.y+")");
}
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
map[i][j]=scan.nextInt();
bfs();
}
}
POJ-3984-迷宫问题(bfs+记录路径)的更多相关文章
- poj 3414 Pots 【BFS+记录路径 】
//yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...
- poj 3984 迷宫问题 bfs
学会这道水题之后我懂得了不少哈,首先水题也能学到不少知识,尤其像我这样刚入门的小菜鸟,能学到一些小技巧. 然后就是可以从别人的代码里学到不一样的思路和想法. 这题就是求最短的路径,首先想到就是用bfs ...
- (简单) POJ 3414 Pots,BFS+记录路径。
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- [POJ 3984] 迷宫问题(BFS最短路径的记录和打印问题)
题目链接:http://poj.org/problem?id=3984 宽度优先搜索最短路径的记录和打印问题 #include<iostream> #include<queue> ...
- POJ - 3984 迷宫问题 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, ...
- POJ 3984 迷宫问题 bfs 难度:0
http://poj.org/problem?id=3984 典型的迷宫问题,记录最快到达某个点的是哪个点即可 #include <cstdio> #include <cstring ...
- POJ 3984 - 迷宫问题 - [BFS水题]
题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...
- POJ 3984 迷宫问题 (BFS + Stack)
链接 : Here! 思路 : BFS一下, 然后记录下每个孩子的父亲用于找到一条路径, 因为寻找这条路径只能从后向前找, 这符合栈的特点, 因此在输出路径的时候先把目标节点压入栈中, 然后不断的向前 ...
- POJ - 3984 迷宫问题 bfs解法
#include<stdio.h> #include<string.h> #include<algorithm> #include<stack> usi ...
- BFS(最短路+路径打印) POJ 3984 迷宫问题
题目传送门 /* BFS:额,这题的数据范围太小了.但是重点是最短路的求法和输出路径的写法. dir数组记录是当前点的上一个点是从哪个方向过来的,搜索+,那么回溯- */ /************* ...
随机推荐
- 反弹shell备忘录
反弹shell备忘录 简单理解,通常是我们主动发起请求,去访问服务器(某个IP的某个端口),比如我们常访问的web服务器:http(https)://ip:80,这是因为在服务器上面开启了80端口的监 ...
- 目标检测:yolo-v3与faster-rcnn
一. 算法背景 1. 机器视觉实际应用往往涉及包含多个物体的复杂场景,基于深度卷积神经网络的特征提取器,需要结合其他算法来准确定位多个目标,并进行识别. 2. 工业领域,目标检测算法在安防和质检系统都 ...
- MySQL常用关键词
MySQL常用关键词 1. 显示表departments的结构:DESC DESC departments; 2. 显示出表employees中的全部job_id(不能重复):DISTINCT SE ...
- 一篇文章带你搞定 ElasticSearch 术语
这篇文章主要介绍 ElasticSearch 的基本概念,学习文档.索引.集群.节点.分片等概念,同时会将 ElasticSearch 和关系型数据库做简单的类比,还会简单介绍 REST API 的使 ...
- symfonos2
0x01 进入网页 啥也没有 0x02 目录爆破 啥也没有 0x03 端口扫描 知识盲区: ProFTPD 1.3.5 用ProFTPD服务权限执行复制命令,默认在'nobody'用户的特权下运行.通 ...
- Centos7之firewall配置命令
firewalld的基本使用 查看状态:systemctl status firewalld 启动:systemctl start firewalld 停止:systemctl stop firewa ...
- C#24种设计模式汇总
创建型:6 01. 简单工厂模式 08. 工厂方法模式 09. 原型模式 13. 建造者模式 15. 抽象工厂模式 21. 单例模式 结构型:7 06. 装饰模式 07. 代理模式 12. 外观模式 ...
- uniapp-使用心得
<view class="cu-item flex-sub" :class="index==TabCur?'text-orange cur':''" v- ...
- RadioButton改写的开关按钮
先上效果图: 这个控件其实是俩个RadioButton,通过样式就可以实现. 样式资源: <Style x:Key="Tong_Yong_RadioButtonStyle" ...
- opencv —— Sobel 一阶导数算子、Scharr 滤波器 一阶导数用于边缘检测
sobel 算子的基本概念 sobel 算子是一个主要用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导,用于计算图像灰度函数的近似梯度. 其基础来自于一个事实,即在边缘部分,像素值出现“跳跃”或 ...