用c语言实现给定一个m行n列的矩阵matrix,按照顺时针螺旋顺序,返回矩阵中的所有元素。
时间: 2025-06-09 13:04:09 浏览: 14
在C语言中,你可以通过嵌套循环和条件判断来实现顺时针螺旋遍历矩阵的功能。以下是一个简单的示例函数,它接受一个二维数组(代表矩阵)和其大小作为参数,并返回一个包含所有元素的数组:
```c
#include <stdio.h>
#define ROW matrix[m]
#define COL matrix[n]
// 函数声明
int* spiralOrder(int m, int n, int matrix[ROW][COL]);
// 指针指向结果数组的初始位置
int* result = 0;
// 助手函数用于计算新行和新列
void setNewRange(int& startRow, int& endRow, int& startCol, int& endCol, int m, int n) {
if (startRow >= endRow || startCol >= endCol)
return;
// 从左上角开始,按顺时针方向移动
for (int i = startRow; i <= endRow; ++i)
result[startCol++] = matrix[i][startCol];
// 到达右边界,向下移动
for (int i = startCol + 1; i <= endCol; ++i)
result[endRow--] = matrix[endRow][i];
// 到达下边界,向左移动
if (startRow != endRow) {
for (int i = endRow - 1; i >= startRow; --i)
result[--startCol] = matrix[i][endCol];
}
// 再次到达左边界,向上移动
if (startCol != startRow) {
for (int i = startCol - 1; i >= 0; --i)
result[++endRow] = matrix[startRow][i];
}
}
// 主函数:顺时针螺旋遍历矩阵并存储结果
int* spiralOrder(int m, int n, int matrix[ROW][COL]) {
int startRow = 0, endRow = m - 1, startCol = 0, endCol = n - 1;
result = (int*)malloc((m * n) * sizeof(int));
while (startRow <= endRow && startCol <= endCol) {
setNewRange(startRow, endRow, startCol, endCol, m, n);
}
// 返回结果指针,注意释放内存
return result;
}
// 示例
int main() {
int matrix[4][4] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
int size = 4 * 4;
int* spiral = spiralOrder(4, 4, matrix);
for (int i = 0; i < size; ++i) {
printf("%d ", spiral[i]);
}
free(spiral);
return 0;
}
```
阅读全文
相关推荐

















