java - 查找多维数组的所有垂直遍历
问题描述
如果我有以下多维数组(任意大小):
a,b,c
d,e,f
g,h,i
而且我想找到所有可能的垂直遍历(adg、adh、aeh、aeg、aei、bdg 等),我将如何在 Java 中做到这一点?
让我感到困难的是数组是任意正方形大小的事实(你不知道它是 a2x2
还是 a3x3
或4x4
),所以你不能只N
嵌套 for loops
, where N = length of multidimensional array
。任何帮助都会很棒!
编辑:我将垂直遍历定义为向下和向左移动、直接向下、向下和向右移动
解决方案
有很多方法可以解决这个问题,但也许你可以使用递归深度优先搜索。
尝试:
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
推荐阅读
- vba - 访问报告 - 根据最大高度在多个控件周围绘制边框
- c# - 当数据集为空时,SQLiteDataAdapter 返回错误的列类型
- php - PHP未设置不适用于在同一PHP脚本中上传的文件
- python - 当您只能使用一个返回语句并且使用 print() 不起作用时,如何在一个函数中打印多个不同的东西
- c - 我如何导航和描述这个函数试图从给定的汇编代码中实现什么?
- python - 将代码从 Tensorflow 1 迁移到 Tensorflow 2 时,如何处理属性错误:“Adam”对象没有属性“compute_gradient”?
- c - 显示的链表无法将指针转换为 void
- android - 为什么位图是空的?
- php - 带有花括号和美元符号的 PHP 错误
- c++ - C++:从 lambda 继承,重载决议“怪癖”