寻找二维维数阵列中的“踪迹”

时间:2016-10-18 07:17:36

标签: arrays algorithm search multidimensional-array pseudocode

我不知道如何弄清楚这个问题,我只是计算机科学的初学者。

输入将是2D数组A [n] [n]数字,表示地理表面的地形图。输入中还将是起始位置(r,c)。参考条目A [r] [c]

如果您计划远足径,您将受到相邻条目之间的高度差异的约束。如果一个人的高度相差不超过2,则可以在两个相邻位置之间穿越。邻接仅遵循4个标准指南针方向(因此我假设没有对角线)。因此,如果地图上的一个点可以从A [r] [c]到任何相邻的entires序列遍历,则认为它是可达的。

编写一个计算所有可到达位置的算法。输出将是具有true / fals值的另一个2D数组R [n] [n]。 (我假设true表示可达,false表示无法访问)

如果我正确理解了这个问题,我可以创建以下矩阵。 (假设A [10] [10]从A [0] [0]看起来像这样:)

50 51 54 58 60 60 60 63 68 71
48 52 51 59 60 60 63 63 69 70
44 48 52 55 58 61 64 64 66 69
44 46 53 52 57 60 60 61 65 68
42 45 50 54 59 61 63 63 66 70
38 42 46 56 56 63 64 61 64 62
36 40 44 50 58 60 66 65 62 61
36 39 42 49 56 62 67 66 65 60
30 36 40 47 50 64 64 63 62 60
50 50 50 50 50 50 50 50 50 50

南部和东部都可以从A [0] [0]遍历,因此可到达的条目将是:

50 51 54 58 60 60 60 63 68 71
48 52 51 59 60 60 63 63 69 70
44 48 52 55 58 61 64 64 66 69
44 46 53 52 57 60 60 61 65 68
42 45 50 54 59 61 63 63 66 70
38 42 46 56 56 63 64 61 64 62
36 40 44 50 58 60 66 65 62 61
36 39 42 49 56 62 67 66 65 60
30 36 40 47 50 64 64 63 62 60
50 50 50 50 50 50 50 50 50 50

所以我可以断定我的结果数组应该是

1 1 0 0 0 0 0 1 0 0
1 1 1 0 0 0 1 1 0 0
0 0 1 0 0 0 1 1 1 0
0 0 1 1 0 0 0 0 1 0
0 0 0 1 0 0 0 0 1 0
0 0 0 1 1 0 0 0 1 1
0 0 0 0 1 1 0 0 1 1
0 0 0 0 1 1 0 0 0 1
0 0 0 0 0 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0

我们的教授要求我们以伪代码实现这一点。我不知道如何比较两个相邻点和4个方向的点。谁能给我一些想法?

1 个答案:

答案 0 :(得分:1)

这只是洪水填充。您需要一个队列和一个索引可寻址的“已访问”标志向量。将root放入队列中。 Whist队列不为空,取第一个元素,并检查可到达的位置N,S,E,W。然后检查他们是否已被访问过。如果没有,请将它们标记为已访问,并将它们放入队列中。