我想处理nxn矩阵的每个边界单元格。例如对于int array[5][5]; 算法应该处理每个x元素,所以它有形式
x x x x x
x - - - x
x - - - x
x - - - x
x x x x x
处理这些细胞的最佳方法是什么?如果它是一个 3 维数组呢?在此先感谢,并为矩阵表示感到抱歉。
编辑我只想使用一个循环以避免嵌套循环或递归。
我想处理nxn矩阵的每个边界单元格。例如对于int array[5][5]; 算法应该处理每个x元素,所以它有形式
x x x x x
x - - - x
x - - - x
x - - - x
x x x x x
处理这些细胞的最佳方法是什么?如果它是一个 3 维数组呢?在此先感谢,并为矩阵表示感到抱歉。
编辑我只想使用一个循环以避免嵌套循环或递归。
想象一下,触摸每个元素都有其成本,而您只想触摸边框元素。
显然,这不是一般的优化。但在图像处理方面,我有很好的表现。我的意思是,这取决于,在你的情况下测试它并决定。
在二维数组中,您可以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 == 0
情况index == 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]);
}
}
}
因此,对于 5x5 数组,调用将是:
processNXNBorders(arr, 5, 5);