定义一个二维数组:
int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
package com.acm;
import java.util.Stack;
public class Maze {
private static Stack<String> STACK = new Stack<String>();
private static int MAZE[][] = { { 0, 1, 0, 0, 0 }, { 0, 1, 0, 1, 0 },
{ 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 0 }, { 0, 0, 0, 1, 0 } };
public static void generate() {
int row = 0;
int erect = 0;
int size = MAZE.length;
// !(row == size && erect == size)
while (row != size - 1 || erect != size - 1) {
int now_row = row;
int now_erect = erect;
if (row + 1 < size && MAZE[row + 1][erect] == 0) {
row++;
} else if (erect + 1 < size && MAZE[row][erect + 1] == 0) {
erect++;
} else if (row - 1 >= 0 && MAZE[row - 1][erect] == 0) {
row--;
} else if (erect - 1 >= 0 && MAZE[row][erect - 1] == 0) {
erect--;
} else {
MAZE[now_row][now_erect] = 3;// DEAD
if (STACK.empty()) {
System.out.println("No resolution");
return;
}
String pop = STACK.pop();
String[] key = generateValue(pop);
row = Integer.valueOf(key[0]);
erect = Integer.valueOf(key[1]);
continue;
}
STACK.push(generateKey(now_row, now_erect));
MAZE[now_row][now_erect] = 2;
}
if (row == size - 1 && erect == size - 1) {
STACK.push(generateKey(row, erect));
}
print();
}
public static void print() {
for (String str : STACK) {
System.out.println(str);
}
}
public static String generateKey(int i, int j) {
return "[" + i + "," + j + "]";
}
public static String[] generateValue(String key) {
return key.replace("[", "").replace("]", "").split(",");
}
public static void main(String[] args) {
generate();
}
}
分享到:
相关推荐
这个程序“迷宫算法实现”很可能是一个用于解决如何从起点找到终点的迷宫导航系统。下面将详细介绍迷宫算法及其实现。 迷宫算法通常基于两种主要类型:深度优先搜索(DFS)和广度优先搜索(BFS)。DFS倾向于探索一...
本篇文章将深入探讨如何用C++实现迷宫算法,并将其应用于数据结构的学习。 首先,我们需要理解迷宫的基本结构。一个迷宫通常由一个二维矩阵表示,其中0代表可以通过的路径,1代表墙壁或障碍物。我们的目标是找到从...
递归算法是一种常用的迷宫算法实现方法,其原理是通过递归函数来搜索迷宫中的路径。递归算法的优点是实现简单、易于理解,但其缺点是可能会出现栈溢出问题。 三、使用栈作为辅助结构 使用栈作为辅助结构的迷宫算法...
本文将详细解析用C语言实现的迷宫算法,通过深入理解其核心思想,帮助读者掌握此类算法的基本原理和实现技巧。 首先,我们要了解迷宫算法的基本概念。迷宫可以被抽象为一个二维网格,其中每个节点代表一个位置,...
这里我们将详细探讨两种不同的迷宫算法实现。 1. **深度优先搜索(DFS,Depth-First Search)** 深度优先搜索是一种递归的遍历方法,适用于有向或无向图。在迷宫问题中,DFS会沿着一个方向深入到死胡同,然后回溯...
迷宫算法是计算机科学中的一种路径寻找问题,它在游戏设计、图形学、人工智能和算法竞赛等领域有着广泛的应用。在解决迷宫问题时,我们通常需要设计或选择一种算法来帮助“虚拟角色”或者程序从起点找到终点。下面将...
本文将深入探讨迷宫算法的实现,特别是使用栈这种数据结构来解决这类问题。我们将讨论迷宫的设置、方向选择、绝境与墙的判断,以及如何通过编程实现这些概念。 首先,迷宫的设置通常涉及创建一个二维矩阵来表示迷宫...
本主题将深入探讨如何在VC/C++环境中利用队列数据结构来实现迷宫算法。队列是一种先进先出(FIFO)的数据结构,非常适合解决这类问题。 首先,我们需要理解迷宫的基本构造。一个迷宫可以表示为一个二维网格,其中每...
在“maze”这个压缩包中,可能包含了实现优化迷宫算法的源代码。通过分析这些代码,我们可以深入理解优化的具体细节,例如使用的数据结构、搜索策略以及优化方法等。 五、应用与扩展 优化的迷宫算法不仅限于解决纯...
`Debuger`可能是调试工具或包含调试信息的文件夹,而`AlgorithmLib`则可能是包含具体算法实现的类库项目。通过这些源码,我们可以深入了解每种算法的具体实现细节,学习如何在C#中高效地编写这些算法。对于学习和...
**三、迷宫算法实现** 1. **表示迷宫**: 迷宫可以使用二维数组表示,0代表可通行路径,1代表墙壁或障碍物。 2. **初始化**: 创建迷宫的可视化界面,使用SWING组件如JButton或JLabel表示迷宫中的每个单元格。 3. *...
迷宫算法是一种在计算机科学中常见的问题,主要应用于游戏开发、路径规划等领域。自动生成迷宫的算法有很多种,包括深度优先搜索(DFS)、广度优先...通过阅读和理解这些文件,我们可以深入学习和实践迷宫算法的实现。
本文将深入探讨使用Java实现迷宫算法,特别是结合搜索回溯策略,并带有方向倾向性。 首先,我们要理解迷宫问题的基本框架。迷宫通常可以表示为一个二维网格,每个单元格可能是开放路径(可以通过)或障碍(无法通过...
在本文中,我们将深入探讨如何使用C#编程语言实现迷宫算法,并重点讲解利用堆栈数据结构来解决这一问题。迷宫算法是一个经典的路径搜索问题,通常用于游戏开发、路径规划和其他需要找到从起点到终点最短路径的应用...
使用C++实现迷宫路线的解法。使用了“类”。
迷宫算法的c语言实现,数据结构中关于栈的应用。
迷宫算法是数据结构应用的一个有趣实例,通常用于解决路径寻找问题。在这个实验中,我们将利用栈这一数据结构来解决迷宫问题。 栈是一种线性数据结构,遵循“后进先出”(LIFO)原则,类似于日常生活中的堆叠物品。...
这个源码实例主要位于压缩包内的"Maze"目录下,同时也包含其他相关程序源码,帮助读者全面理解迷宫算法的实现过程。 迷宫算法的核心在于如何生成和解决复杂路径问题。在VC++环境下,开发者通常会选择一种或多种经典...
在本项目中,我们探讨的是基于严蔚敏教授的经典教材《数据结构》中的一种迷宫算法的实现。迷宫算法通常用于解决路径寻找问题,如在复杂的网格环境中找到从起点到终点的最短路径。在这个程序中,我们将重点讨论如何...