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

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

a,b,c

d,e,f

g,h,i

我想找到所有可能的垂直遍历(adg,adh,aeh,aeg,aei,bdg等),我将如何在Java中做到这一点?

让我感到困难的是数组的大小是任意正方形的(您不知道它是2×2还是3×3或4×4),所以您不能仅使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会将y和x移动到严格低于当前单元格的相邻单元格,并将其内容保存到curr.如果dfs遍历到底部,它将打印curr.

输出:

adg
adh
aeg
aeh
aei
bdg
bdh
beg
beh
bei
bfh
bfi
ceg
ceh
cei
cfh
cfi
上一篇:C#图形遍历-任意两个节点之间的跟踪路径


下一篇:有向循环图遍历的算法(JavaScript)