如何用C语言实现一个逆时针方向填充n*n矩阵的螺旋算法?
时间: 2024-11-12 13:18:52 浏览: 58
C语言解决螺旋矩阵算法问题的代码示例
在C语言中,我们可以使用嵌套循环和四个指针来实现逆时针方向填充n*n矩阵的螺旋算法。这个过程通常从左上角开始,顺时针移动直到填满外围一圈,然后内侧一圈逆时针,如此反复。以下是基本步骤:
#include <stdio.h>
void spiralFill(int matrix[n][n], int n) {
int startRow = 0, endRow = n - 1, startCol = 0, endCol = n - 1;
while (startRow <= endRow && startCol <= endCol) {
// 从左到右填充当前行
for (int i = startCol; i <= endCol; ++i) {
matrix[startRow][i] = i * n + startRow;
}
startRow++;
// 从上到下填充当前列
for (int i = startRow; i <= endRow; ++i) {
matrix[i][endCol] = matrix[startRow - 1][endCol] + 1;
}
endCol--;
// 如果还有空间,逆向填充当前行
if (startRow < endRow) {
for (int i = endCol; i >= startCol; --i) {
matrix[endRow][i] = matrix[endRow][endCol - 1] - n;
}
endRow--;
}
// 最后,逆向填充当前列
if (startRow < endRow) {
for (int i = endRow; i >= startRow; --i) {
matrix[i][startCol] = matrix[endRow - 1][startCol] - 1;
}
startCol++;
}
}
}
// 示例
int main() {
int size = 4;
int matrix[size][size];
spiralFill(matrix, size);
// 打印结果矩阵
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}