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

时间:2018-07-31 01:23:20

标签: java arrays algorithm graph-algorithm traversal

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

a,b,c

d,e,f

g,h,i

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

让我感到困难的是,该数组具有任意正方形大小(您不知道它是2x2还是3x34x4),因此,您不能仅将N嵌套到loops,其中N = length of multidimensional array。任何帮助都会很棒!

编辑:我将垂直遍历定义为上下移动,直接向下移动以及右移

1 个答案:

答案 0 :(得分:3)

有很多方法可以解决此问题,但也许您可以使用递归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]);
        }
    }
}

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


输出:

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