当前位置: 首页 > 知识库问答 >
问题:

查找两个单元格之间的路由数

冯开诚
2023-03-14

这里的练习是:我需要编写一个递归方法,它可以得到N*N大小的正整数矩阵,起始单元格行和列索引以及结束单元格行和列html" target="_blank">索引,并且该方法需要返回从起始单元格到结束单元格的可能路径数,这些约束条件是:a.你可以从当前位置移动到左单元格、右单元格、上单元格或下单元格。b.你不能越过主对角线,但是你可以转到对角线上的单元格(但不能越过它)。路由中的每个单元格只出现一次。d.矩阵需要像原始矩阵一样,末尾有原始单元格值

到目前为止我得到的是:

public static int numPaths (int[][] mat,int x1, int y1, int x2, int y2){
        if(x1>y1 || x2>y2 || y1<x1 || y2<x2) return 0;
        return numPaths(mat ,x1, y1, x2, y2, x1, y1);
    }
    public static int numPaths (int[][] mat ,int x1, int y1, int x2, int y2, int row, int col){
        if(row<0 || col <0 || row>=mat.length || col>=mat.length ) return 0;
        if(row==x2 && col==y2){ 
            return 1;
        }
        if(row==col){ 
            return numPaths ( mat ,x1, y1, x2, y2, row, col+1) + numPaths( mat ,x1, y1, x2, y2, row-1,col);

        }
        else{
            return numPaths( mat ,x1, y1, x2, y2, row, col+1) + numPaths( mat ,x1, y1, x2, y2, row+1, col)+
                    numPaths( mat ,x1, y1, x2, y2, row-1, col) + numPaths( mat ,x1, y1, x2, y2, row, col-1);    
            }

        }

但我得到堆栈溢出错误,因为我不能使差异,当我访问的细胞之前。我确信在递归方法中有一种方法可以改变单元格中的值,并在以后使其恢复正常,但我想不出一种方法如何做到这一点。

请告知

共有1个答案

昌勇锐
2023-03-14

如果您打算使用矩阵来存储单元格是否已被访问,那么最好将其设置为布尔矩阵。然后在递归之前将值设置为true,然后在递归之后设置为false。

类似下面的方法应该会起作用。我将变量移到类中,因为似乎没有必要传递它们。

比如:

private final int size;
private final boolean visited[][] = new boolean[size][size];

public int numPaths(int x, int y) {
    if (visited[x][y] || x < 0 || y < 0 || x >= size || y >= size)
        return 0;
    if (x == size - 1 && y == size - 1)
        return 1;
    visited[x][y] = true;
    int numPaths = 0;
    numPaths += numPaths(x - 1, y) + numPaths(x, y - 1);
    if (x != y)
        numPaths += numPaths(x + 1, y) + numPaths(x, y + 1;
    visited[x][y] = false;
    return numPaths;
}
 类似资料:
  • 试图在kubernetes上进入istio,但似乎我缺少了一些基础知识,或者我正在做一些背靠背的事情。我对kubernetes很有经验,但istio及其虚拟服务让我有点困惑。 我创建了2个部署(helloworld-v1/helloworld-v2)。两者具有相同的图像,唯一不同的是环境变量 - 输出版本:“v1”或版本:“v2”。我正在使用我编写的一个小测试容器,它基本上返回我进入应用程序的标头

  • 问题内容: 如何使用PHP查找两个日期之间的天数? 问题答案:

  • 我们希望您能够帮助我们解决以下问题: 给出了一个可能包含圈的有向图。必须找到一组满足以下标准的路径: 在从节点A到节点B的过程中可以通过的所有边必须被集合内的路径覆盖(一条边可以是集合中多条路径的一部分) 解决方案不必是路径数最少的解决方案,路径也不必是最短的。然而,该解决方案应该可以像java一样使用编程语言高效地实现。我们需要解决方案来生成几个测试用例,覆盖节点a和节点B之间的所有边很重要。

  • 问题内容: 我正在尝试创建一个表格,其中每个单元格具有背景颜色,并且它们之间具有空白。但我似乎在执行此操作时遇到了麻烦。 我尝试设置边距,但似乎没有效果。 如果我对填充执行相同的操作,则可以,但是在单元格之间没有间距。 有人可以帮我吗? 问题答案: 使用元素上的属性设置单元格之间的间距。 确保设置为(否则每个单元格之间将有一个单独的边框,而不是每个单元格之间可能会有间隔的单独边框)。

  • 问题内容: 我正在使用networkx处理图。我有一个很大的图(其中有近200个节点),我尝试查找两个节点之间的所有可能路径。但是,据我了解,networkx只能找到最短的路径。如何不仅获得最短路径,还获得所有可能路径? UPD:路径只能包含每个节点一次。 UPD2:我需要类似find_all_paths()函数的功能,在此进行描述:python.org/doc/essays/graphs.htm

  • 我有两个数据帧df1和df2,其中df2是df1的子集。我如何获得一个新的数据帧(df3),它是两个数据帧之间的差值? 换句话说,一个数据帧,它包含了df1中所有的行/列,而不是DF2中的行/列?