1

我有一个 800 x 600 的图像。我想把它当作一个矩阵来获取相邻的元素

前任。

(0,0) (1,0) (2,0) (3,0)

(0,1) (1,1) (2,1) (3,1)

(0,2) (1,2) (2,2) (3,2)

(0,3) (1,3) (2,3) (3,3)

示例解决方案: (0,0) 与: (1,0) (0,1) (1,1) 相邻

(1,1) 与: (0,0) (1,0) (2,0) (2,1) (2,2) (1,2) (0,2) (0,1) 相邻

所以我写了一个结构数组,我会将这些点中的每一个存储到

typdef struct point
{
    int x;
    int y;
}point[800*600];

所以我的第一个想法是实施一个 dfs,但这并没有真正奏效,所以我想获得外部意见,以使自己保持在正确的轨道上。谢谢

4

1 回答 1

0

最终答案取决于您如何将 2D 显示器的排列可视化为 1D 数组(“行第一列最后”或“列第一行最后”)。

假设“行优先”(沿行的像素递增 1,沿列的像素递增 ROW_LENGTH):

首先使用一些定义来设置 ROW_LENGTH 和 COL_LENGTH 的值

#define ROW_LENGTH 800
#define COL_LENGTH 600

然后,如果需要更改,您可以轻松调整大小,而不会影响其余代码的工作方式。

typdef struct point
{
    int x;
    int y;
}point[ROW_LENGTH*COL_LENGTH];

稍后,可以通过以下方式获得相邻点:

adjacentWest = point[(y*ROW_LENGTH) + (x-1)];
adjacentNorth = point[((y+1)*ROW_LENGTH) + x];

您需要将 North 和 South 调整为 +1 或 -1,具体取决于您的原点是在显示屏的左上角还是左下角。

于 2011-03-31T18:58:37.867 回答