Tag: 深度优先搜索

简单实现迷宫生成方法(随机DFS)

在一次采访中,我的采访者问我这个问题: 开发一个生成随机迷宫的function 如果你以前没有解决过这个问题,这是一个很难在30分钟内解决的问题。 在互联网上有很多解决方案,但似乎没有一个容易。 该方法应该遵循这个约束: 它应该接受迷宫的大小(方形迷宫NxN) 它应该只包含Walls和Path 为简单起见,该算法不需要设置入口和出口 我将用解决方案发布答案​​,以便其他人能够找到这个问题。 生成的迷宫示例: . # # . # . . . . . . . . . . . # # # . # . # # # # . . . . . # . . . . # . # . . # . # # […]

深度优先搜索二维arrays

我正在尝试通过创建一个通过迷宫(2d数组)导航我的食人魔的程序来学习DFS。这类似于每日编程挑战,但我只用1×1食人魔做这件事。 我的迷宫: static int[][] maze = { {2,1,0,0,0,0,0,0,0,0}, {0,0,1,0,0,0,0,0,0,0}, {1,0,0,0,0,1,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,0,0,0,0,0,0}, {0,0,1,0,0,0,0,1,0,1}, {1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,0,0,0}, {0,0,0,0,0,1,0,0,0,3}}; 其中2是我的英雄(0,0),3是我的目标(9,9),1是障碍物,0是可穿越空间。 由于我是新手,我怀疑它是否需要,但生病包括整个程序,以便于复制和故障排除。 import java.awt.Point; import java.util.ArrayList; public class OgrePath { static int[][] maze = { {2,1,0,0,0,0,0,0,0,0}, {0,0,1,0,0,0,0,0,0,0}, {1,0,0,0,0,1,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,0,0,0,0,0,0}, {0,0,1,0,0,0,0,1,0,1}, {1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,0,0,0}, {0,0,0,0,0,1,0,0,0,3}}; public static boolean[][] visited = new boolean[maze.length][maze[0].length]; static ArrayList neighbors = new ArrayList(); […]

益智游戏Android DFS算法

我有一个名为Islands和bridge的android应用程序,也称为Hashiwokakero 应用程序使用A 2 Dimensional数组,每次用户重新启动游戏时随机生成群岛它形成一个数字从0到4的矩阵,其中0 = null和1-4 =岛可以有2个桥从一个岛出来连接另一方面,目前的地图无法解决。 为了解决游戏,用户需要使用网桥连接岛屿,因此如果岛屿= 4则需要4个连接,如果岛屿= 2则需要2个连接等等。 在我的研究中,我发现解决游戏的最佳算法是使用深度优先搜索 – 文章 我在这里看了不同的问题,但似乎无法找到解决方案,因为我的数组是String类型而不是integer 。 问题如何应用DFS算法连接岛? 这是我的应用程序的屏幕截图。 这个函数创建了一个简单的map 4×4矩阵: private void InitializeEasy() { Random rand = new Random(); String[][] debug_board_state = new String[4][4]; setCurrentState(new State(WIDTH_EASY)); for (int row = 0; row < debug_board_state.length; row++) { for (int column = 0; column < debug_board_state[row].length; column++) { […]

简单的Java 2darrays迷宫样本

我正在工作或了解如何创建一个简单的java 2d迷宫 ,它应该如下所示: int [][] maze = { {1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,1,0,1,0,0,0,0,0,1}, {1,0,1,0,0,0,1,0,1,1,1,0,1}, {1,0,0,0,1,1,1,0,0,0,0,0,1}, {1,0,1,0,0,0,0,0,1,1,1,0,1}, {1,0,1,0,1,1,1,0,1,0,0,0,1}, {1,0,1,0,1,0,0,0,1,1,1,0,1}, {1,0,1,0,1,1,1,0,1,0,1,0,1}, {1,0,0,0,0,0,0,0,0,0,1,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1} }; 这个已创建的想法是设置一个起点和目标点并通过使用递归深度首先找到路径。 但必须说我很难创造迷宫。 你有什么建议怎么做吗? 或者也许是教程的链接? 我现在主要关注的是创造迷宫。

如何实现广度优先搜索到一定深度?

我理解并且可以轻松实现BFS。 我的问题是,我们怎样才能将这个BFS限制在一定深度? 假设,我只需要深入10级。

Dijkstra的算法带有’必须通过’节点

我正在尝试实现Dijkstra的算法,该算法可以找到起始节点和结束节点之间的最短路径。 在到达终端节点之前,有一些“必须通过”的中间节点(多于一个),例如2或3必须通过必须在到达终端节点之前通过的节点。 如果我有一个必须通过节点,我找到的解决方案是找到从必须传递节点到目的地的两个不同路径,并从必须传递节点到启动节点。 我没有想法如何实现这样的算法。 有什么建议么? 谢谢。 List closestPathFromOrigin = null; double maxD = Double.POSITIVE_INFINITY; double _distance = 0; int temp1 = 0; List referencePath = new ArrayList(); boolean check = false; Node startNode = null; public List recursion(ArrayList points, ArrayList intermediatePoints) { if (!check) { System.out.println(“— DATA —“); System.out.println(“Intermediate points: ” + intermediatePoints); System.out.println(“points: ” […]