它表示一个迷宫,其中的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————迷宫问题的更多相关文章

  1. Java迷宫游戏

    缘起: 去年(大三上学期)比较喜欢写小游戏,于是想试着写个迷宫试一下. 程序效果: 按下空格显示路径: 思考过程: 迷宫由一个一个格子组成,要求从入口到出口只有一条路径. 想了一下各种数据结构,似乎树 ...

  2. Java迷宫代码,广度优先遍历,最短路径

    使用一个队列,采用层层扩张的方式,寻找迷宫最优的路径信息,再用一个迷宫节点数组记录行走信息方向常量定义: public interface Constant { // 右方向 int RIGHT = ...

  3. Java迷宫代码,深度优先遍历

    此次迷宫深度优先遍历寻找路径采用栈结构,每个节点都有固定的行走方向(右下左上),除非一个方向走不通,不然会一条道走到黑. 如果路径存在,打印出行走路径,否则打印出迷宫不存在有效路径. 方向常量定义: ...

  4. 蓝桥杯java 迷宫

    0101010100101100100101011001011010010000100010101000001000100000101010010000100000001001100110100101 ...

  5. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  6. 小项目特供 简易迷宫(基于Java)

    明天返校,于是昨天和今天简单熟系了一下JAVA的GUI,做了一个简易的迷宫小游戏(暂时没有时间实现随机迷宫及多关卡,仅供学习) 源码及运行文件(提供JRE8):链接:简易迷宫 密码:hy8v

  7. HDOJ-ACM1010(JAVA) 奇偶剪枝法 迷宫搜索

    转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5568822.html 第一次遇到迷宫搜索,给我的感觉是十分惊喜的:搞懂这个的话,感觉自己又掌握了一项技能~ 个人 ...

  8. Java与算法之(12) - 老鼠再闯迷宫(广度优先算法)

    贪吃的小老鼠又回来了,这次有什么新的办法吃到奶酪呢? 规则不变,只能上下左右在格子内移动. 因为上次的深度优先算法让老鼠走了不少冤枉路,这次老鼠带来了帮手探路鼠.探路鼠的使用规则如下: 小老鼠按右.下 ...

  9. Java与算法之(5) - 老鼠走迷宫(深度优先算法)

    小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...

随机推荐

  1. Python相关文章

    1.一台计算机如何安装2个版本的python,互不影响呢 2.Eclipse和PyDev搭建完美Python开发环境(Windows篇) 3.基于官方教程的matplotlib简介

  2. 前端笔记-jquery

    一.什么是jquery 1.jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team 2.jQuery是继prototype之后又一个优秀的 ...

  3. EF 数据迁移 常见错误

    1.错误 “LC.exe”已退出,代码为 -1 原因:解决方案出错,而非迁移的项目

  4. SocketIO Server

    package com.fd.socketio; import org.json.JSONObject; import com.corundumstudio.socketio.AckRequest; ...

  5. my.conf配置信息

    # mysql conf /etc/my.cnf# Created by http://www.wdlinux.cn# Last Updated 2010.06.01 [client]port = 3 ...

  6. python测试开发django-3.url配置

    前言 我们在浏览器访问一个网页是通过url地址去访问的,django管理url配置是在urls.py文件.当一个页面数据很多时候,通过会有翻页的情况,那么页数是不固定的,如:page=1.也就是url ...

  7. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-5安装JDK及安装mysql数据库

    1.安装JDK 可以不用卸载自带的openjdk,配好环境变量即可. 下载文件:jdk-8u151-linux-x64.tar.gz 附:JDK各版本下载地址:https://www.oracle.c ...

  8. CVTE C/C++开发工程师笔试题(一)

    问题描述: 字符串组装. 现在需要将一些数据格式不同的数据组装成一个char型字符串输出,数据来源包含一个char型的字符串,一个short型的16进制数据: 举例: 假若定义如下2个变量: 1.ch ...

  9. T4设计时模板调试

    在Visual Studio内调试T4设计时模板有多个方法:安装使用带调试功能的第三方工具,利用System.Diagnostics.Debugger实时调试器,VS内置的T4调试工具.使用第三方工具 ...

  10. 20175234 2018-2019-2 《Java程序设计》第七周学习总结

    目录 20175234 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 String类常用用法 Date类与Calendar类常用用法 Math类的常用方法 ...