如果我有以下多维数组(具有任意大小):
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