实验名称
实验三 数字旋转方阵程序设计
实验目的
(1)掌握分治法的设计思想;
(2)掌握数字旋转方阵的具体实现过程;
(3)熟练掌握二维数组的使用方法;
(4)在掌握的基础上编程实现数字旋转方阵的实现过程。
实验题目
给出一个初始数据,在此数据的基础上由外层向里层填写数据,完成一个数字旋转方阵,输出结果,输出时要求有文字说明。请任选一种语言编写程序实现上述算法,并分析其算法复杂度。
实验源代码
#include<stdio.h>
int data [100][100];
int key = 0;
void SquareMatrix (int num, int size){
int i, j, k;
if(size == 0){
return;
}
if(size == 1){
data[key][key] = num;
return;
}
i = key; j = key;
for(k=0; k<size-1; k++){
data[i][j] = num;
num++;
i++;
}
for(k=0; k<size-1; k++){
data[i][j] = num;
num++;
j++;
}
for(k=0; k<size-1; k++){
data[i][j] = num;
num++;
i--;
}
for(k=0; k<size-1; k++){
data[i][j] = num;
num++;
j--;
}
key++;
SquareMatrix(num, size-2);
}
int main(){
int num, size;
printf("请输入当前层左上角要填的数字:");
scanf("%d", &num);
printf("请输入方阵的阶数:");
scanf("%d", &size);
SquareMatrix(num, size);
printf("以下是输出的%d阶数字旋转矩阵:\n", size);
for(int i=0; i<size; i++){
for(int j=0; j<size; j++){
printf("%d ",data[i][j]);
}
printf("\n");
}
}
实验结果
算法SquareMatrix的复杂度如下:
如果n = 0时,T(n) = 0;
如果n = 1时,T(n) = 1;
如果n > 1时,T(n) = O(n^2);