在2D矩阵中查找相邻元素

Roc*_*art 4 c# algorithm matrix

我有一个m*n阶的二维矩阵

00 01 02 03 ....0n
10 11 12 13 ....1n
20 21 22 23 ....2n
..
m0 m1 m2  m3 ...mn
Run Code Online (Sandbox Code Playgroud)

由此,给定一个元素,我需要编写一个返回其相邻元素的方法.相邻元件水平,垂直或对角相邻.

例如,01的相邻元素是00,02,10,11,12 00的相邻元素是01,10,11相邻元素11是00,01,02,10,12,20,21,22

有人可以帮我用一个乐观的算法来解决这个问题吗?

Mat*_*dge 6

public static IEnumerable<T> AdjacentElements<T>(T[,] arr, int row, int column)
{
    int rows = arr.GetLength(0);
    int columns = arr.GetLength(1);

    for (int j = row - 1; j <= row + 1; j++)
        for (int i = column - 1; i <= column + 1; i++)
            if (i >= 0 && j >= 0 && i < columns && j < rows && !(j == row && i == column))
                yield return arr[j, i];
}

...

var arr = new[,] { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };

var results = AdjacentElements(arr, 1, 3);

foreach(var result in results) 
    Console.WriteLine(result)
Run Code Online (Sandbox Code Playgroud)

得出答案:3 4 7 11 12(与8相邻的元素).

  • @Rockstart 不,我不是。我正在迭代我们感兴趣的九个元素(3 x 3 块)。 (2认同)