c - 获取二维矩阵的相邻元素(仅限深度一)

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

我有一张 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/

相关文章:

Python C++ 包装器 : Convert multi-type struct to it's python representation (preferable dictionary)

matlab - 如何根据某些条件删除 Matlab 中的矩阵行?

c - 打印时动态分配的矩阵会出现段错误

Python Numpy - 矩阵替换全局矩阵中定义的矩阵..类似于 Matlab

具有约束、BFS 或 DFS 的最短路径算法

algorithm - 在有向图和无向图上工作以检测循环的单一算法?

algorithm - 如果在计算强连通分量时不使用 G 转置怎么办?

c - scanf() 将换行符留在缓冲区中

我可以将整个数组从 *void 重新转换为 *int 吗?

c++ - 这是什么控制风格?