C 获取二维矩阵的相邻元素(仅深度1)

C 获取二维矩阵的相邻元素(仅深度1),c,matrix,depth-first-search,adjacency-list,adjacency-matrix,C,Matrix,Depth First Search,Adjacency List,Adjacency Matrix,我有一张800乘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 po

我有一张800乘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,沿列的像素增量为行长度):

首先使用一些定义来设置行长度和列长度的值

#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];

您需要将南北方向调整为+1或-1,这取决于您的原点是在显示器的左上角还是左下角。

您似乎过度考虑了这个问题-为什么不使用2D数组?这已经是C问题了-您需要修复标记。“存储每个点”是什么意思?你在储存什么?颜色值?假设您有
arr
类型为
point
的对象。
arr[0].x中会有什么?而在
arr[0].y中
?而在
arr[800].x中
。。。