Java————迷宫问题
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
package algorithm_java; import java.util.Scanner;
import java.util.Stack; /**
* 路径问题 可以走的最小路径
*/ class Node{
public int x;
public int y;
Node(int x, int y){
this.x = x;
this.y = y;
}
} public class Labyrinth_Path {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int labyrinth[][] = new int[5][5];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
labyrinth[i][j] = scanner.nextInt();
}
}
judge(labyrinth);
} private static void judge(int[][] labyrinth_1) {
int[][] dir = {{1, 0}, {0, 1}}; // 行走的方向
Stack<Node> stack = new Stack<>(); // 设置一个栈来存储信息
int [][] visited = new int[5][5]; // 标记是否被访问 和labyrinth大小一致
Node start = new Node(0, 0); // 开始的节点信息
Node end = new Node(4, 4); // 结束的位置
visited[start.x][start.y] = 1; // 将起点信息标记为1
stack.push(start); // 将起点信息压栈
while (!stack.isEmpty()){ // 不为空没有找到解
boolean flag = false; // 标记是否找了一个方向
Node pek = stack.peek();
if (pek.x == end.x && pek.y == end.y){
break;
} else {
for (int i = 0; i < 2; i++) {
Node nbr = new Node(pek.x + dir[i][0], pek.y + dir[i][1]);
// 判断是否满足条件
if (nbr.x >= 0 && nbr.x < 5 && nbr.y >= 0 && nbr.y < 5 && labyrinth_1[nbr.x][nbr.y] == 0 && visited[nbr.x][nbr.y] == 0){
stack.push(nbr);
visited[nbr.x][nbr.y] = 1;
flag = true;
break;
}
}
if (flag){ // 找到了方向 就不用执行出栈 一直往下找
continue;
}
stack.pop(); // 两个方向都不可以出栈
}
}
Stack<Node> stackRev = new Stack<>(); // 调整栈的内容
while (!stack.isEmpty()){
stackRev.push(stack.pop());
}
while (!stackRev.isEmpty()){
System.out.println("(" + stackRev.peek().x + "," + stackRev.peek().y + " )");
stackRev.pop();
}
}
}
Java————迷宫问题的更多相关文章
- Java迷宫游戏
缘起: 去年(大三上学期)比较喜欢写小游戏,于是想试着写个迷宫试一下. 程序效果: 按下空格显示路径: 思考过程: 迷宫由一个一个格子组成,要求从入口到出口只有一条路径. 想了一下各种数据结构,似乎树 ...
- Java迷宫代码,广度优先遍历,最短路径
使用一个队列,采用层层扩张的方式,寻找迷宫最优的路径信息,再用一个迷宫节点数组记录行走信息方向常量定义: public interface Constant { // 右方向 int RIGHT = ...
- Java迷宫代码,深度优先遍历
此次迷宫深度优先遍历寻找路径采用栈结构,每个节点都有固定的行走方向(右下左上),除非一个方向走不通,不然会一条道走到黑. 如果路径存在,打印出行走路径,否则打印出迷宫不存在有效路径. 方向常量定义: ...
- 蓝桥杯java 迷宫
0101010100101100100101011001011010010000100010101000001000100000101010010000100000001001100110100101 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 小项目特供 简易迷宫(基于Java)
明天返校,于是昨天和今天简单熟系了一下JAVA的GUI,做了一个简易的迷宫小游戏(暂时没有时间实现随机迷宫及多关卡,仅供学习) 源码及运行文件(提供JRE8):链接:简易迷宫 密码:hy8v
- HDOJ-ACM1010(JAVA) 奇偶剪枝法 迷宫搜索
转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5568822.html 第一次遇到迷宫搜索,给我的感觉是十分惊喜的:搞懂这个的话,感觉自己又掌握了一项技能~ 个人 ...
- Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)
贪吃的小老鼠又回来了,这次有什么新的办法吃到奶酪呢? 规则不变,只能上下左右在格子内移动. 因为上次的深度优先算法让老鼠走了不少冤枉路,这次老鼠带来了帮手探路鼠.探路鼠的使用规则如下: 小老鼠按右.下 ...
- Java与算法之(5) - 老鼠走迷宫(深度优先算法)
小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...
随机推荐
- MM-科目自动分配
SAP系统篇 MM自动记账解析之基本概念(01) https://blog.csdn.net/qq_33641781/article/details/78027802 MM自动记账解析之功能实现(02 ...
- 从数据类型 varchar 转换为 numeric 时出错.
如果说你的数据库字段是varchar,但是存储的数据是数值,在出报表时需要转成int或numeric时,无论怎么样都报错. 错误信息: 消息 8114,级别 16,状态 5,第 1 行 从数据类型 v ...
- 服务器端AJAX的Servlet代码实现
package com.itheima.servlet; import java.io.IOException; import javax.servlet.ServletException; impo ...
- javaMail实现收发邮件(五)
控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类型的数据处理模块,我们只需要在把数据流传输给浏 ...
- Java框架spring 学习笔记(十九):事务管理(注解管理)
注解管理的方式要比xml配置方式要简单很多 只需在配置文件中添加事务注解 <?xml version="1.0" encoding="UTF-8"?> ...
- JDBC测试计划-连接mysql
一.测试环境准备 mysql:5.5 JDBC驱动:mysql-connector-java-5.1.30.jar 文件复制到JMeter/lib目录下 JMeter:jmeter-3.2 ...
- 关于socket
使用socket常用的操作就是读写,recv和send,与read.write对应,但多了一个flag位可以设定阻塞等,一些细节以后再探.目前使用时发现read往往不能将数据完整读出,可能是调用时内核 ...
- Exp4 恶意代码分析 20165110
Exp4 恶意代码分析 20165110 一.实践目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生 ...
- 【c# 数据库】 多表链接
1.inner join string sql = "select * from studentsinfo inner join teacher on teacher.姓名 = studen ...
- 19-06 【phpunit和docker】
phpunit简介 在用PHP做项目的时候,有时候我们需要写一些测试代码,其中可能包含单元测试(比如字符串处理,ip解析,mobile解析等). 我们常用的工具是phpunit,它很方便地帮我们组织测 ...