迷宫问题(java实现)
1、
public class Direction {
private int x;
private int y;
public Direction(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
2、
public class Position {
private int x;
private int y;
private int d;
public int getX() {
return this.x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return this.y;
}
public void setY(int y) {
this.y = y;
}
public Position(int x, int y, int d) {
this.x = x;
this.y = y;
this.d = d;
}
public int getD() {
return this.d;
}
public void setD(int d) {
this.d = d;
}
}
3、
import java.util.Iterator;
import java.util.Stack;
public class MazeProblem {
public static Stack<Position> path(int[][] maze, Direction[] move) {
Stack<Position> s = new Stack<Position>();
// 起点位置 还未开始探索所以无方向
Position start_p = new Position(1, 1, -1);
s.push(start_p);
maze[1][1] = -1; // 起点位置表示已经走过,不可以往回探索,pop的时候 可以退回
while (!s.empty()) {
Position temp = s.pop(); // 取出当前的位置 准备进行向下探索
// 确定探索的位置方向
int x = temp.getX(); // 当前处在正在探索的位置和方向
int y = temp.getY();
int d = temp.getD() + 1;// 探索的方向
while (d < 8) { // 开始探索 一共八个方向
int i = x + move[d].getX(); // 根据某个方向探的下一个位置
int j = y + move[d].getY();
if (maze[i][j] == 0) { // 如果下一个位置是可以进去的,则放入当前位置
s.push(new Position(x, y, d));
x = i; // 把当前探索位置 调整为放入的位置
y = j;
d = 0; // 调整方向为0,为下次探索做准备
maze[x][y] = -1; // 然后设置为已走过
if (x == Destination.m && y == Destination.n) { // 在判断是不是已经是终点位置 如果是 则程序退出
s.push(new Position(x, y, d));
return s;
}
} else {
d++; //// 如果下一个位置是不可以进去的,则放入调整方向
}
}
}
return new Stack<Position>();
}
//终点位置
static class Destination {
static int m = 6;
static int n = 8;
}
public static void main(String[] arg) {
// 0表示可进入 1 表示 不可以进去 -1 表示走过的路劲也不可进入
// 每个位置 都有八个方向
int[][] maze = {
// 0 1 2 3 4 5 6 7 8 9
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, //
{ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 }, //
{ 1, 1, 0, 1, 0, 1, 1, 1, 1, 1 }, //
{ 1, 0, 1, 0, 0, 0, 0, 0, 0, 1 }, //
{ 1, 0, 1, 1, 1, 1, 1, 0, 1, 1 }, //
{ 1, 1, 0, 0, 1, 1, 1, 1, 0, 1 }, //
{ 1, 0, 1, 1, 0, 0, 0, 0, 0, 1 }, //
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } //
};
Direction[] move =
{
new Direction(0, 1),
new Direction(1, 1),
new Direction(1, 0),
new Direction(1, -1),
new Direction(0, -1),
new Direction(-1,-1),
new Direction(-1, 0),
new Direction(-1, 1)
};
Stack<Position> s = MazeProblem.path(maze, move);
Iterator<Position> it = s.iterator();
while (it.hasNext()) {
Position e = it.next();
System.out.println(e.getX() + ",-->" + e.getY());
}
}
}
迷宫问题(java实现)的更多相关文章
- 小项目特供 简易迷宫(基于Java)
明天返校,于是昨天和今天简单熟系了一下JAVA的GUI,做了一个简易的迷宫小游戏(暂时没有时间实现随机迷宫及多关卡,仅供学习) 源码及运行文件(提供JRE8):链接:简易迷宫 密码:hy8v
- hdu 1272 小希的迷宫(java实现)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 算法笔记_107:蓝桥杯练习 算法提高 学霸的迷宫(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java迷宫游戏
缘起: 去年(大三上学期)比较喜欢写小游戏,于是想试着写个迷宫试一下. 程序效果: 按下空格显示路径: 思考过程: 迷宫由一个一个格子组成,要求从入口到出口只有一条路径. 想了一下各种数据结构,似乎树 ...
- HDOJ-ACM1010(JAVA) 奇偶剪枝法 迷宫搜索
转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5568822.html 第一次遇到迷宫搜索,给我的感觉是十分惊喜的:搞懂这个的话,感觉自己又掌握了一项技能~ 个人 ...
- Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)
贪吃的小老鼠又回来了,这次有什么新的办法吃到奶酪呢? 规则不变,只能上下左右在格子内移动. 因为上次的深度优先算法让老鼠走了不少冤枉路,这次老鼠带来了帮手探路鼠.探路鼠的使用规则如下: 小老鼠按右.下 ...
- Java与算法之(5) - 老鼠走迷宫(深度优先算法)
小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...
- 剑指Offer——回溯算法解迷宫问题(java版)
剑指Offer--回溯算法解迷宫问题(java版) 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路. 下面我们来详细讲一 ...
- Java————迷宫问题
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. package algorithm_java; import java. ...
随机推荐
- 聚合数据全国天气预报API--ajax 通过城市名取数据
聚合数据天气预报API:https://www.juhe.cn/docs/api/id/39 接口地址:http://v.juhe.cn/weather/index 支持格式:json/xml 请求方 ...
- java.net.ConnectException: failed to connect to /10.0.2.2 (port 80): connect
在使用GENYMOTION作为Android程序调试模拟器连接web服务器时,报了:java.net.ConnectException: failed to connect to /10.0.2.2 ...
- Apache 使用gzip、deflate 压缩页面加快网站访问速度
Apache 使用gzip 压缩页面加快网站访问速度 介绍: 网页压缩来进一步提升网页的浏览速度,它完全不需要任何的成本,只不过是会让您的服务器CPU占用率稍微提升一两个百分点而已或者更少. 原理 ...
- oracle 数据库 基础操作
一.oracle基本常用的数据类型 varchar(长度) 字符串 char(长度) 字符 number(x,y) x表示总位数 y表示保留小数点后几位数 eg面试题:number(5,3)最大的数是 ...
- 【Python3 爬虫】05_安装Scrapy
Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛.框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容 ...
- iOS开发-Swift获取手机设备信息(UIDevice)
使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...
- 关于Azure Storage Blob Content-Disposition 使用学习
概述 在常规的HTTP应答中,Content-Disposition 消息头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地.通俗的解释就是对 ...
- ExCEL操作技巧集锦,持续更新
1.格式刷 word里面格式化的快捷键很好用,但是excel里面的快捷键用不了,经百度得知: excel双击格式化按钮,可以开启连续应用格式刷模式,单击之后关闭,这样比快捷键好用多了,如下图
- #1214 - The used table type doesn't support FULLTEXT indexes解决办法
#1214 - The used table type doesn't support FULLTEXT indexes报此错误的原因是:InnoDB不支持FULLTEXT类型的索引. 网上的解决办法 ...
- sqrt函数实现(神奇的算法)
我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然 ...