1

我有800乘600的图像。我想对待它像一个矩阵,并得到相邻的元素获取2D矩阵的相邻元素(仅深度为1)

前。

(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但是这并没有真正制定出一个结构数组,所以我希望得到一个外面的意见让自己保持在正确的轨道上。谢谢

+1

看起来好像你正在解决这个问题 - 为什么不使用2D数组? – 2011-03-31 18:37:28

+0

这已经在C问题了 - 你需要修复标签。 – 2011-03-31 18:51:45

+0

你是指“存储每一个这些点”是什么意思?你在储存什么?颜色值? – 2011-03-31 18:58:55

回答

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

你需要调整南北是+1或-1取决于如果你的起源是在顶部显示器的左侧或左侧。