我正在尝试编写一个递归方法,它可以找到一个路径,而不需要回溯到一个int矩阵中的一个位置,这个矩阵包含值0,1。0可以踩,1不行。我也限制了一条超过50步的路径。
Location是一个具有行和列值(x,y)的对象。locationEquals是一个函数,如果两个位置相同,则返回true,否则返回false。map变量是我试图在其中找到路径的矩阵。
private static List<List<Location>> options = new ArrayList<List<Location>>();
public static void PathFind(List<Location> path)
{
Location current = path.get(path.size() - 1);
boolean done = false;
if(locationEquals(current,new Location(24,38)))
{
options.add(path);
return;
}
if(path.size() > 50) done = true;
if(!done)
{
try
{
if(map[current.row][current.col + 1] == 0)
{
if(!path.contains(new Location(current.row, current.col + 1)))
{
List<Location> temp = path;
temp.add(new Location(current.row, current.col + 1));
PathFind(temp);
}
}
}
catch (Exception e){}
try
{
if(map[current.row - 1][current.col] == 0)
{
if(!path.contains(new Location(current.row - 1, current.col)))
{
List<Location> temp = path;
temp.add(new Location(current.row - 1, current.col));
PathFind(temp);
}
}
}
catch (Exception e){}
try
{
if(map[current.row][current.col - 1] == 0)
{
if(!path.contains(new Location(current.row, current.col - 1)))
{
List<Location> temp = path;
temp.add(new Location(current.row, current.col - 1));
PathFind(temp);
}
}
}
catch (Exception e){}
try
{
if(map[current.row + 1][current.col] == 0)
{
if(!path.contains(new Location(current.row + 1, current.col)))
{
List<Location> temp = path;
temp.add(new Location(current.row + 1, current.col));
PathFind(temp);
}
}
}
catch (Exception e){}
}
执行以下代码后'选项'为空,这意味着它没有找到方法。但这个矩阵中肯定有方法,所以这是我代码中找不到的错误。
问题在于,每次进入递归的下一步时,您并没有创建一个新的列表(您的temp变量并不是真正的临时变量,因为它只是对您的路径的引用,而不是它的副本)。
为了解决这个问题,我替换了<代码>列表
所以代码是:
private static List<List<Location>> options = new ArrayList<List<Location>>();
public static void PathFind(List<Location> path) {
Location current = path.get(path.size() - 1);
boolean done = false;
if (locationEquals(current, new Location(24, 38))) {
options.add(path);
return;
}
if (path.size() > 50) done = true;
if (!done) {
try {
if (map[current.row][current.col + 1] == 0) {
if (!path.contains(new Location(current.row, current.col + 1))) {
List<Location> temp = new ArrayList<>(path);
temp.add(new Location(current.row, current.col + 1));
PathFind(temp);
}
}
} catch (Exception e) {
}
try {
if (map[current.row - 1][current.col] == 0) {
if (!path.contains(new Location(current.row - 1, current.col))) {
List<Location> temp = new ArrayList<>(path);
temp.add(new Location(current.row - 1, current.col));
PathFind(temp);
}
}
} catch (Exception e) {
}
try {
if (map[current.row][current.col - 1] == 0) {
if (!path.contains(new Location(current.row, current.col - 1))) {
List<Location> temp = new ArrayList<>(path);
temp.add(new Location(current.row, current.col - 1));
PathFind(temp);
}
}
} catch (Exception e) {
}
try {
if (map[current.row + 1][current.col] == 0) {
if (!path.contains(new Location(current.row + 1, current.col))) {
List<Location> temp = new ArrayList<>(path);
temp.add(new Location(current.row + 1, current.col));
PathFind(temp);
}
}
} catch (Exception e) {
}
}
}
我不知道该如何解决这个问题。我得到了一个有12个节点A-L的图。17个边缘连接它们。我被告知要找到从A到L的所有路径。我可以遍历一个节点多次,但只能遍历一次边。输出应该打印每个路径和路径总数。 例如,如果只有1个路径。输出应为: 我想一个递归的深度优先搜索函数应该可以解决这个问题,但我就是想不出一个打印每一条路径的方法。例如,如果我的函数找到一个路径ABDL并到达结尾L,它将打印ABDL。然后它回
我有以下Java代码,可以在图中找到从一个节点到另一个节点的路径,如何修改它,以便显示所有可能的路径。这里只显示了一条路径,它是一个循环? 输出:路径:[1、2、3、4、1] 对于节点1和4之间的路径,正确的输出应该是: 第一条路径:1- 第二条路径:1- 代码:
这个问题是在我Java期末考试中提出的: 给定一个正数矩阵(未排序)< code>m,一个整数< code>sum和另一个矩阵< code>p,该矩阵全部用< code>0填充。递归检查< code>m内部是否有一个路径,它的和等于< code>sum。 规则: 您只能在数组中向下、向上、向左或向右移动。 找到路径后,矩阵< code>p将用正确路径上的< code > 1 填充。 只有一条路径
NowCoder 题目描述 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如下面的矩阵包含了一条 bfce 路径。 解题思路 使用回溯法(backtracking)进行求解,它是一种暴力搜索方法,通过搜索所有可能的结果来求解问题。回溯法在一次搜
问题内容: 是否可以在SQL中创建“树解析器”? 我有一张桌子: 现在,我想返回一个SQL查询: SQL可能吗?这对我来说会使很多事情变得容易。任何帮助将不胜感激! 问题答案: 根据所使用的数据库服务器的不同,可能已经为您提供了此功能。否则,您可以创建一个调用自身以返回此信息的函数,或者实现一个物化路径解决方案。 更新: 对于DB2,您可以使用递归公用表表达式。
一、题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中间向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 举例分析 例如在下面的3*4的矩阵中包含一条字符串”bcced”的路径。但矩阵中不包含字符串“abcb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二格子之后,路径