【发布时间】:2017-07-21 16:30:23
【问题描述】:
我一直在考虑如何从给定的起点 Arr[x][y] 找到数组中的所有可到达点,其中可到达点是与当前位置值相差不超过 2 的点.然后我想返回一个数组,它在所有可到达的位置都有 1,在无法到达的位置有 0。
假设 Arr[6][6] 看起来像这样:
10 11 14 18 20 20
11 12 11 19 20 20
24 28 12 15 18 31
44 46 13 12 57 30
42 45 10 14 59 31
38 42 46 16 16 23
那么返回的数组会是这样的
1 1 0 0 0 0
1 1 1 0 0 0
0 0 1 0 0 0
0 0 1 1 0 0
0 0 0 1 0 0
0 0 0 1 1 0
我认为实现这一目标的最佳方法是创建一个 newArr 然后有 4 种不同的情况,我将当前位置与其每个邻居进行比较,然后如果它们可以到达,则设置 newArr[x][y ] 为 1。否则将其设置为 0。有人可以解释我如何确定下一步要移动到哪里,以及如何跟踪我已经测试过的点吗?
考虑原始数组中的[0][0]位置,比较后,既然可以右移或下移,我该如何决定呢?或者以某种方式两者兼而有之?
【问题讨论】:
-
解决方案表示第2行第3列(从左下角第1行第1列开始)的50是可达的。这意味着对角连接计数——R3C4 中的 52 是值 50 的 2 内的唯一单元格。所以,你必须从所有方向看,看起来——从当前单元格最多 8 条路。但是,解决方案并不完全一致。 R1C5 处的 56 应该是解决方案的一部分,除非有一条未说明的规则关于“必须与当前单元格中的值不同,但在当前单元格中的值的 2 以内”。
-
@JonathanLeffler 抱歉,我在输入结果数组时犯了一个错误。我想我现在修好了,但不允许对角线移动
标签: c arrays algorithm multidimensional-array