import java.util.Arrays;
import java.util.Stack;
/**
* 迷宫
*
* @author 风华褚胜
*/
public class MiGong {
public static void main(String[] args) {
Stack<Position> stack = new Stack<Position>(); // 保存迷宫路径
Stack<Object[]> end = new Stack<Object[]>();// 保存可通路路径
new MiGong().f(getMiGong(), 1, 1/* 是起始坐标 */, 8, 8/* 是终点坐标 */,
0/* 上一步的方向 */, stack, end);
int shor = Integer.MAX_VALUE;
int index = 0;
for (int i = 0; i < end.size(); i++) {
if (shor > end.get(i).length) {
index = i;
shor = end.get(i).length;
}
}
if (end.size() != 0) {
System.out.println("最短路径:");
System.out.println(Arrays.toString(end.get(index)));
} else
System.out.println("无通路");
}
public static int[][] getMiGong() {
// int[][] num = { { 1, 1, 1, 1, 1 },
// { 1, 0, 1, 1, 1 },
// { 1, 0, 1, 1, 1 },
// { 1, 0, 0, 0, 1 },
// { 1, 1, 0, 0, 1 },
// { 1, 1, 1, 1, 1 } };
int[][] num = { { 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 0, 1, 1, 0, 1 },
{ 1, 0, 1, 0, 0, 1, 0, 0, 1 }, { 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 1 }, { 1, 1, 0, 1, 1, 0, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1 } };
return num;
}
/**
* 求取所有路径
*
* @param num
* 迷宫矩阵
* @param start_row
* 开始坐标x
* @param start_col
* 开始坐标y
* @param end_row
* 结束坐标x
* @param end_col
* 结束坐标y
* @param dro
* 上一步走的方向
* @param s
* 保存迷宫路径
* @param end
* 保存可通路路径
*/
public void f(int[][] num, int start_row, int start_col, int end_row,
int end_col, int dro, Stack<Position> s, Stack<Object[]> end) {
// System.out.println(Arrays.toString(s.toArray()));
s.push(new Position(start_row, start_col));
if (start_row == end_row && start_col == end_col) {
System.out.println(Arrays.toString(s.toArray()));
end.push(s.toArray());
s.pop();
return;
}
num[start_row][start_col] = 1;
if (dro != 2 && num[start_row - 1][start_col] == 0) {
f(num, start_row - 1, start_col, end_row, end_col, 1, s, end);
}
if (dro != 1 && num[start_row + 1][start_col] == 0) {
f(num, start_row + 1, start_col, end_row, end_col, 2, s, end);
}
if (dro != 4 && num[start_row][start_col - 1] == 0) {
f(num, start_row, start_col - 1, end_row, end_col, 3, s, end);
}
if (dro != 3 && num[start_row][start_col + 1] == 0) {
f(num, start_row, start_col + 1, end_row, end_col, 4, s, end);
}
num[start_row][start_col] = 0;
s.pop();
return;
}
/**
* 坐标点的表示类
*
* @author 风华褚胜
*/
class Position {
public int row;
public int col;
public Position(int row, int col) {
this.row = row;
this.col = col;
}
@Override
public String toString() {
return "(" + row + "," + col + ")";
}
}
}
分享到:
相关推荐
以下是关于"Java课程设计走迷宫"的主要知识点: 1. **基础语法与面向对象编程**:在Java中,编写迷宫游戏需要掌握基本的语法结构,如类、对象、方法、变量等。同时,要理解封装、继承和多态等面向对象特性,以便...
首先,迷宫可以被抽象为一个二维数组或矩阵,其中每个元素代表迷宫中的一个位置,可能是墙壁(不可通行)或空地(可通行)。在Java中,我们通常使用二维字符数组来表示迷宫,例如`char[][] maze`,其中字符' '表示...
在Java中,类是程序的基本组织单元,`Maze3D`可能是定义了一个类,该类负责处理迷宫的生成、渲染和游戏交互。迷宫的生成算法可能采用了深度优先搜索(DFS)、广度优先搜索(BFS)或者其他算法,以确保每个迷宫都是...
3. **迷宫表示**:迷宫通常可以用二维数组或者邻接矩阵来表示,其中0表示可通行,1表示墙壁。代码中应该有关于如何创建和操作这种表示的函数。 4. **游戏界面**:如果这是一个完整的迷宫游戏,那么可能会有一个用户...
在Java编程语言中,创建一个简单的迷宫程序是一项有趣且具有挑战性的任务,它涉及到图形界面的构建、路径搜索算法的实现以及数据结构的应用。在这个项目中,我们可以通过以下步骤来构建一个基本的迷宫程序。 首先,...
迷宫问题通常表现为一个二维矩阵或格子,其中每个单元格可以是墙或通道。目标是从起点(源节点)找到一条路径到达终点(目标节点),同时避免碰撞到墙壁。路径的判定通常基于相邻规则,即只能向上下左右四个方向移动...
走迷宫游戏是一种经典的计算机程序设计问题,通常用于教授算法和数据结构。在这个Java编写的走迷宫游戏中,开发者可能使用了多种编程技术来实现。下面我们将深入探讨这个主题,了解可能涉及的知识点。 首先,从标题...
java迷宫自动生成与寻找路径。 可以设置迷宫大小,最大为50,最小为5。 按make为自动绘制迷宫,find为寻找路径。 使用递归、随机方向的方式生成迷宫,位操作来设置上下左右的墙。 文件包括源码与jar运行程序。
【Java带界面迷宫】是一款基于Java编程语言开发的交互式迷宫游戏。这款程序集成了用户界面,允许玩家选择不同的迷宫样式,并且能够自动生成各种复杂的迷宫地图。玩家可以通过键盘操作游戏中的角色进行移动,从而探索...
在这个Java项目中,数据结构的选择可能是二维数组或邻接矩阵,用来表示迷宫的结构。二维数组可以直观地映射迷宫的墙壁和空地,每个元素代表一个格子,值为0或1分别表示可通行和障碍。邻接矩阵则记录了每个格子的相邻...
鼠走迷宫程序设计是计算机科学中的一个经典问题,它涉及到算法、路径搜索以及游戏编程等领域。在这个程序中,我们通常模拟一只老鼠在一个由障碍物构成的迷宫中寻找出口的过程。下面将详细介绍这个主题的相关知识点。...
4. `Main.java` - 应用程序入口,初始化并运行整个迷宫问题。 通过理解和实现这个项目,你可以深入学习Java Swing的组件使用、事件处理,以及如何结合算法解决复杂问题。同时,这也将提高你的数据结构和算法设计...
标题中的“基于生成树的迷宫,有自动走迷宫”指的是一个计算机程序,它使用了生成树算法来解决迷宫问题,并且具备自动寻路的功能。生成树算法在图论中是一个重要的概念,用于找到图的一个子集,这个子集包含了图的...
Java程序通常会用二维字符数组来表示迷宫,例如使用'X'代表墙壁,' '代表空地。 在Java中,我们可以利用数据结构如栈或队列来解决迷宫问题。最常见的算法有深度优先搜索(DFS)和广度优先搜索(BFS)。DFS通常使用...
【标题】: "基于Java的迷宫程序" 是一个编程项目,主要使用Java语言实现了一款迷宫游戏或算法。这个项目的重点在于利用Java的面向对象特性、数据结构和算法来设计并解决迷宫问题。 【描述】: "基于Java的迷宫程序" ...
1. **数据结构**:首先,迷宫可以抽象为一个二维数组或矩阵,其中0代表通道,1代表墙壁。这种表示方式便于我们进行逻辑处理和路径搜索。另外,可能还需要用到栈(Stack)或队列(Queue)来存储待检查的节点。 2. **...
在本项目"java小迷宫"中,我们探讨的是一个基于Java编程语言的简单迷宫游戏,这是一项针对初级学习者的课程设计。这个项目旨在帮助初学者熟悉Java编程基础,理解面向对象编程的概念,以及如何利用算法来解决实际问题...
1. **迷宫生成**:在游戏开始时,程序会随机生成一个迷宫。这涉及到矩阵或图的表示,以及随机算法的选择。例如,DFS会在一个空白网格上进行递归地“挖墙”,直到形成一个连通的迷宫。BFS则可能使用栈来逐步构造迷宫...
这个"maze12*12 走迷宫源代码"针对的是一个12x12大小的二维矩阵迷宫,适合大一C++初学者进行学习和实践。下面将详细介绍这个主题中的关键知识点。 首先,我们要理解迷宫问题的基本设定。一个迷宫可以被抽象为一个二...
这个压缩包文件包含了四个Java源文件,分别命名为Applet.java、Main.java、UI.java和Walk.java,这表明它是一个完整的Java应用,可能是一个图形用户界面(GUI)程序,用于解决走迷宫的问题。 1. **Applet.java**:...