用C语言编译一个螺旋矩阵
时间: 2024-10-27 22:10:13 浏览: 39
在C语言中,编写一个螺旋矩阵生成函数可以分为几个步骤。螺旋矩阵是由内到外、从上往下的递增顺序,同时围绕中心元素旋转排列的。这里是一个简单的示例,用于创建指定大小的螺旋矩阵:
```c
#include <stdio.h>
#define ROWS 4 // 可以替换为你想要的矩阵大小
// 定义一个结构体存储矩阵元素
typedef struct {
int data;
} SpiralMatrix;
// 函数声明,生成并返回螺旋矩阵
SpiralMatrix* generateSpiralMatrix(int n);
// 释放动态分配的内存
void freeSpiralMatrix(SpiralMatrix** matrix);
// 实现生成螺旋矩阵的主要逻辑
SpiralMatrix* generateSpiralMatrix(int n) {
SpiralMatrix** matrix = (SpiralMatrix**)malloc(sizeof(SpiralMatrix*) * ROWS);
for (int i = 0; i < ROWS; i++) {
matrix[i] = (SpiralMatrix*)malloc(sizeof(SpiralMatrix) * n);
}
int start_row = 0, end_row = ROWS - 1, start_col = 0, end_col = n - 1;
int dir = 0; // 0:向上, 1:向右, 2:向下, 3:向左
while (start_col <= end_col && start_row <= end_row) {
for (int i = start_col; i <= end_col; i++) {
matrix[start_row][i].data = i + start_col * ROWS;
printf("%d ", matrix[start_row][i].data); // 打印当前元素
}
if (dir != 3) {
for (int i = start_row + 1; i <= end_row; i++) {
matrix[i][end_col].data = i + start_col * ROWS;
printf("%d ", matrix[i][end_col].data);
}
}
if (dir != 2) {
end_col--;
}
if (start_row < end_row) {
for (int i = end_col - 1; i >= start_col; i--) {
matrix[end_row][i].data = end_row + start_col * ROWS;
printf("%d ", matrix[end_row][i].data);
}
}
if (start_col < end_col) {
start_row++;
}
dir = (dir + 1) % 4; // 切换方向
}
return matrix;
}
// 主函数展示结果
int main() {
SpiralMatrix* spiral = generateSpiralMatrix(ROWS);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", spiral[i][j].data);
}
printf("\n");
}
freeSpiralMatrix(&spiral); // 释放内存
return 0;
}
// 释放动态分配的矩阵数组
void freeSpiralMatrix(SpiralMatrix** matrix) {
for (int i = 0; i < ROWS; i++) {
free(matrix[i]);
}
free(matrix);
}
阅读全文