java - 查找多维数组的所有垂直遍历

标签 java arrays algorithm graph-algorithm traversal

如果我有以下多维数组(任意大小):

a,b,c

d,e,f

g,h,i

我想找到所有可能的垂直遍历(adg、adh、aeh、aeg、aei、bdg 等),我将如何在 Java 中执行此操作?

让我感到困难的是数组的大小是任意的(你不知道它是 2x2 还是 3x3 还是 4x4),因此您不能只为 loops 嵌套 N,其中 N = 多维数组的长度。任何帮助都会很棒!

编辑:我将垂直遍历定义为向下和向左移动、直接向下、向下和向右移动

最佳答案

有很多方法可以解决这个问题,但也许你可以使用递归 depth-first search .

尝试:

public static void main(String[] args) {
    int size = 3;

    String arr[][] = {
            {"a", "b", "c"},
            {"d", "e", "f"},
            {"g", "h", "i"}
    };

    for (int i = 0; i < size; i++) {
        dfs(arr, 0, i, size, arr[0][i]);
    }
}

static void dfs(String[][] arr, int y, int x, int size, String curr) {
    if (y == size - 1) {
        System.out.println(curr);
    } else {
        if (x > 0) {
            dfs(arr, y + 1, x - 1, size, curr + arr[y + 1][x - 1]);
        }
        dfs(arr, y + 1 , x, size, curr + arr[y + 1][x]);
        if (x < size - 1) {
            dfs(arr, y + 1, x + 1, size, curr + arr[y + 1][x + 1]);
        }
    }
}

dfs 会将 yx 移动到严格低于当前单元格的相邻单元格,并将其内容保存到 curr。如果dfs遍历到底部,它会打印curr


输出:

adg
adh
aeg
aeh
aei
bdg
bdh
beg
beh
bei
bfh
bfi
ceg
ceh
cei
cfh
cfi

关于java - 查找多维数组的所有垂直遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51604258/

相关文章:

java - 是否有一个预定义的方法通过给定的行数和列数在 java 中进行 padarray

javascript - 如何使用 Struts 中的属性名称通过 JavaScript 动态创建 HTML?

java - J2ME,逐行处理永无休止的http连接

java - 找不到依赖项 : expected at least 1 bean 的 [HrEmployeesReportOutput] 类型的合格 bean

java - 尝试在任何布局中添加描边宽度时,MaterialButton 不可见

java - Spring Boot 与 Thymeleaf 失败

javascript - 使用数组内的循环值

algorithm - 切片堆叠框的线性时间算法

algorithm - 在二维网格中生成单向路径

c - 坚持在框架窗口上实现边界检查以进行均值过滤