给出一个初始数据,在此数据的基础上由外层向里层填写数据,完成一个数字旋转方阵,输出结果,输出时要求有文字说明。请任选一种语言编写法,并分析其算法复杂度。
/*
Name: 数字选择方阵
Copyright: 2113040833
Author: fjw
Date: 21/03/23 20:45
Description: 采用分治法减少问题规模,递归调用,对问题进行简化 。
*/
#include<Stdio.h>
#include<stdlib.h>
int num = 1;//起开始的数字
int n = 0;
int start = 0;
int i,j = 0;
void DSM (int **arr,int start,int size,int num) {
if(size == 0) {
return;
}
if (size ==1) {
arr[start][start] = num;
return;
}
i = start,j = start;
for (n = 0; n < size - 1; n++)
{
arr[i++][j] = num++;
}for (n = 0; n < size - 1; n++)
{
arr[i][j++] = num++;
}
for (n = 0; n < size - 1; n++)
{
arr[i--][j] = num++;
}
for (n = 0; n < size - 1; n++)
{
arr[i][j--] = num++;
}
DSM (arr, start+1, size-2,num) ;
}
int main() {
int size;
printf("请输入矩阵阶数");
scanf("%d",&size);
int** arr = (int **)malloc(sizeof(int*)*size); //动态分配内存
for (int i = 0; i < size; i++)
{
*(arr+i) = (int *)malloc(sizeof(int)*size);
}
DSM (arr,start,size,num);
//输出矩阵如下
//注意换行以及对齐方式
printf("输出矩阵如下\n") ;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
printf("%3d",arr[i][j]);
}
printf("\n");
}
return 0;
}