C 获取二维矩阵的相邻元素(仅深度1)
我有一张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)相邻 因此,我编写了一个结构数组,我将把这些点中的每一个存储到其中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
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中
。。。