输入一个矩阵顺时针逆时针螺旋输出矩阵代码C语言
时间: 2024-11-15 20:10:49 浏览: 5
C语言解决螺旋矩阵算法问题的代码示例
在C语言中,我们可以编写一个函数来实现矩阵的顺时针和逆时针螺旋遍历输出。这里给出一个简单的示例,首先我们创建一个函数`spiralPrint`,它接受一个二维数组`matrix`、其行数`m`和列数`n`作为参数。
```c
#include <stdio.h>
// 函数原型
void spiralPrint(int matrix[][n], int m, int n);
int main() {
// 初始化一个例子矩阵
int matrix[3][3] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
int m = sizeof(matrix) / sizeof(matrix[0]);
int n = sizeof(matrix[0]) / sizeof(matrix[0][0]);
// 顺时针打印
printf("顺时针螺旋遍历:\n");
spiralPrint(matrix, m, n);
// 逆时针打印
printf("\n逆时针螺旋遍历:\n");
spiralPrint(matrix, n, m); // 注意,逆时针需要交换行和列
return 0;
}
// 漩涡打印函数
void spiralPrint(int matrix[][n], int m, int n) {
int startRow = 0, endRow = m - 1, startCol = 0, endCol = n - 1;
while (startRow <= endRow && startCol <= endCol) {
// 从左上角到右下角
for (int i = startCol; i <= endCol; ++i) {
printf("%d ", matrix[startRow][i]);
}
startRow++;
// 从右下角到左上角
if (startRow <= endRow) {
for (int i = startRow; i <= endRow; ++i) {
printf("%d ", matrix[i][endCol]);
}
endCol--;
}
// 从左下角到右上角
if (startRow <= endRow && startCol <= endCol) {
for (int i = endCol; i >= startCol; --i) {
printf("%d ", matrix[endRow][i]);
}
endRow--;
}
// 从右上角到左下角
if (startRow <= endRow) {
for (int i = endRow; i >= startRow; --i) {
printf("%d ", matrix[i][startCol]);
}
startCol++;
}
}
}
```
这个程序首先定义了一个`spiralPrint`函数,它使用四个指针控制当前的行开始和结束以及列的开始和结束。然后按顺时针方向逐层打印矩阵,当某一方向无法继续时,就改变另一个方向,直到遍历完整个矩阵。
阅读全文