处理矩阵的边界单元

我想处理nxn矩阵的每个边界单元格。 例如,对于int数组[5] [5]; 算法应该处理每个x元素,因此它具有forms

xxxxxx - - - x x - - - x x - - - x xxxxx 

处理这种细胞的最佳方法是什么? 如果它是一个三维数组怎么样? 在此先感谢,并对矩阵表示感到抱歉。

编辑我想只使用一个循环以避免嵌套循环或递归。

想象一下触摸每个元素有它的成本,你只想触摸边框元素。

显然,这不是一般的优化。 但是在图像处理方面,我的表现非常出色。 我的意思是,它取决于你在你的情况下测试并决定。

在2D数组中,您可以使ptr指向矩阵并逐步进行。

 void process(char i) { cout << i; } int main() { const int N = 5; char mat[N][N] = { {'a', 'b', 'c', 'd', 'e'}, {'f', '-', '-', '-', 'g'}, {'h', '-', '-', '-', 'i'}, {'j', '-', '-', '-', 'k'}, {'l', 'm', 'n', 'o', 'p'} }; char *ptr = (char*) mat; for (int i = 0; i < N - 1; ++i) // Process first row process(*ptr++); for (int i = 0; i < N - 2; ++i) // Process column borders { process(*ptr); process(*(ptr + 1)); ptr += N; } for (int i = 0; i <= N; ++i) // Process last row process(*ptr++); cout << endl; } 

输出:

abcdefghijklmnop

您基本上希望处理数组中每个维度的index == 0index == size的情况。 假设process()是你的处理函数并且接受一个int参数。

 void processNXNBorders(int** twoDArray, int dimonesize, int dimtwosize) { for (int i = 0; i < dimonesize; i++) { if (i == 0 || i == dimonesize-1) { // Process entire row for (int j = 0; j < dimtwosize; j++) { process(twoDArray[i][j]); } } else { // Only first and last elements in this row. process(twoDArray[i][0]); process(twoDArray[i][dimtwosize-1]); } } } 

因此,对于5x5arrays,调用将是:

 processNXNBorders(arr, 5, 5);