【问题标题】:Getting the adjacent elements of a 2D matrix (depth one only)获取二维矩阵的相邻元素(仅限深度一)
【发布时间】:2011-07-27 03:37:07
【问题描述】:

我有一张 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,但这并没有真正奏效,所以我想获得外部意见以使自己保持在正确的轨道上。谢谢

【问题讨论】:

  • 您似乎想多了这个问题——为什么不直接使用二维数组?
  • 这是一个 C 问题了 - 你需要修复标签。
  • “存储每个点”是什么意思?你在储存什么?颜色值?
  • 假设你有arr一个point类型的对象。 arr[0].x 中会有什么内容?在arr[0].y?在arr[800].x? ...

标签: c matrix depth-first-search adjacency-list adjacency-matrix


【解决方案1】:

最终的答案取决于您如何将 2D 显示器的排列可视化为 1D 数组(“row-first column-last”或“column-first row-last”)。

假设“行优先”(沿行的像素递增 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,具体取决于您的原点是在显示屏的左上角还是左下角。

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2018-10-04
    相关资源
    最近更新 更多