2016-10-18 67 views
-1

我不知道如何弄清楚这个问题,我只是计算机科学的初学者。在二维数组中寻找“轨迹”

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

如果您计划登山步道,您将受到相邻条目之间高程差异的限制。一个人可以在两个相邻的地点之间穿行,如果他们的海拔相差不超过2)。邻接只遵循4个标准罗盘方向,(所以我假设没有对角线)。因此,如果地图上的某个点可以通过任何相邻序列序列从A [r] [c]遍历,则认为该点可达。

编写一个计算所有可达位置的算法。输出将是另一个具有true/fals值的二维数组R [n] [n]。 (我假设真正意味着可达,假意味着无法达到)

如果我正确理解这个问题,我可以创建以下矩阵。 (假设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

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