迷宫问题(bfs)
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack; public class BFS
{
private static final int M=3;//代表行
private static final int N=3;//代表列 int destX=1;
int destY=0; //int[][] maze={{0,0,1,1},{0,0,0,1},{1,1,0,1},{0,0,0,0}};//迷宫布局,1表示障碍物
int[][] maze={{0,0,0},{0,1,0},{0,0,0}};//迷宫布局,1表示障碍物
int[][] visit=new int[M][N];//标记是否已经访问过
int[][] stepArr={{-1,0},{1,0},{0,-1},{0,1}};//表示走路的方向:上下左右 class Node
{
int x,y;//表示当前位置的坐标
int step;
int preX,preY; Node(int x,int y,int preX,int preY,int step)
{
this.x=x;//表示当前位置的横坐标
this.y=y;//表示当前位置的纵坐标
this.preX=preX;//表示当前位置前一步的横坐标
this.preY=preY;//表示当前位置前一步的纵坐标
this.step=step;//表示行走的路程
}
} public boolean bfs()
{
Node node=new Node(0,0,-1,-1,0);//起始位置
Queue<Node> queue=new LinkedList<Node>();//LinkedList类实现了Queue接口
Stack<Node> stack=new Stack<Node>(); queue.offer(node);//插入node while(!queue.isEmpty())
{
Node head=queue.poll();//推出队列头 stack.push(head); //用于保存路径
visit[head.x][head.y] = 1; //表示当前位置已被访问,防止两个坐标循环访问
for(int i = 0; i < 4; i++){ //这里的4表示4张方向
int x = head.x + stepArr[i][0];
int y = head.y + stepArr[i][1];
//exit
if(x ==destX && y == destY && maze[x][y] == 0 && visit[x][y] == 0){ //表示找到目的地
//打印路径
Node top = stack.pop();
System.out.println("steps:" + (top.step + 1)); //此处得出的路径是最短路径,因为是queue中保存了每一种可能
System.out.println("the path:");
System.out.println((M - 1) + "," + (N - 1));
System.out.println(top.x + "," + top.y);
int preX = top.preX;
int preY = top.preY;
while(!stack.isEmpty()){
top = stack.pop();
if (preX == top.x && preY == top.y) { // 因为队列中保存了每一次的各种可能,故需要与之前保存的点进行验证
System.out.println(preX + "," + preY);
preX = top.preX;
preY = top.preY;
} }
return true;
}
//bfs
if(x >= 0 && x < M && y >= 0 && y < N &&maze[x][y] == 0 && visit[x][y] == 0){
Node newNode = new Node(x, y, head.x, head.y, head.step + 1);
queue.offer(newNode);
}
} }
return false;
} public static void main(String[] args)
{
BFS b=new BFS();
if (b.bfs()==false)
{
System.out.println("Fail!");
}
} }
利用bfs可求出迷宫的最短路径。
如果使用dfs的话只能判断能否走出迷宫,并不能知道所走路径是否为最短路径。
迷宫问题(bfs)的更多相关文章
- ZZULIOJ 1726 迷宫(BFS+小坑)
1726: 迷宫 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 394 Solved: 64 SubmitStatusWeb Board Descr ...
- HDU 1728 逃离迷宫(BFS)
Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...
- HDU 1728:逃离迷宫(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有 ...
- 迷宫问题(bfs的应用)
问题描述: 定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, ...
- [Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)
题目链接:http://acm.swust.edu.cn/problem/409/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- 问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
题目链接:https://www.dotcpp.com/oj/problem1923.html 题目描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在 ...
- POJ 3984 - 迷宫问题 - [BFS水题]
题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...
- 迷宫问题bfs, A Knight's Journey(dfs)
迷宫问题(bfs) POJ - 3984 #include <iostream> #include <queue> #include <stack> #incl ...
- POJ-3984.迷宫问题(BFS + 路径输出)
昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...
随机推荐
- 关于eclipse入门开发c/c++文章推荐
1. 关于编译说明. http://www.ibm.com/developerworks/cn/linux/opensource/os-ecc/ 2. 关于快捷键与代码阅读 http://www.cn ...
- Saltstack-初体验
安装 rpm -Uvh http://mirrors.yun-idc.com/epel/6Server/x86_64/epel-release-6-8.noarch.rpm yum install s ...
- android中scrollTo和scrollBy的理解
protected int mScrollX; //该视图内容相当于视图起始坐标的偏移量 , X轴 方向 protected int mScrollY; //该视图内容相当 ...
- C语言 文件操作7--文件错误处理
//文件错误处理 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include&l ...
- 完美隐藏win7文件和文件夹
有没有一种方法即使使用隐藏模式也不能查看, 没错可以用上帝模式....... 啥是Win7上帝模式?不知道的看看..... <<<<<<<<<&l ...
- [CareerCup] 4.9 All Paths Sum 所有路径和
4.9 You are given a binary tree in which each node contains a value. Design an algorithm to print al ...
- 解决VC几个编译问题的方法——好用
一.vc网络编程中遇到一个编译问题,原来是少了WSOCK32.LIB. 在 project-->settings-->Link-->Object/Library modules 中加 ...
- Linux 读书笔记 二
一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分 ...
- struts 2.5.5 通配符问题
问题:使用通配符会报错,找不到action. 问题原因: struts2.5 为了增加安全性,在 struts.xml 添加了这么个属性:<global-allowed-methods>r ...
- 成都普华永道税务开发的offer
首先这是一个.net税务开发的offer,我是做开发的. 有没有人在成都普华永道的,最近收到普华永道的offer,如果有的话请联系我.想知道里面的情况.最想知道里面的加班情况,薪资还是有点诱惑的.毕竟 ...