我有一张 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,但并没有真正奏效,所以我想听听外界的意见,让自己走上正轨。谢谢
最佳答案
最终答案取决于您如何将 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,具体取决于您的原点是在显示屏的左上角还是左下角。
关于c - 获取二维矩阵的相邻元素(仅限深度一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5504592/