一、矩阵算法
1、矩阵
矩阵,是线性代数中的基本概念之一。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。矩阵乘法看起来很奇怪,但实际上非常有用,应用也十分广泛。
2、矩阵算法
矩阵算法是一种高效的算法,可以把一些一维递推优化到log( n ),还可以求路径方案等,所以更是是一种应用性极强的算法。
3、矩阵算法的实现
矩阵算法通常需要使用二维数组来实现,矩阵算法往往需要交换或者存取矩阵中的某个元素,这就需要我们灵活掌握二维数组两个下标的变换。
二、打印魔方阵
1、魔方阵
魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2、…、n的平方的n×n的方阵,
其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
2、C语言实现
#include <stdio.h>
#define N 20
void Matrix();
void main()
{
Matrix();
}
//打印n阶魔方阵的函数
void Matrix()
{
int a[N][N], n, i, j, k;
while(1)
{
printf("请输入魔方阵的阶数(n<=20,且是奇数):");
scanf("%d", &n);
if(n!=0 && n<=20 && n%2!=0)
{
printf("%d阶魔方矩阵.\n", n);
break;
}
}
//初始化二维数组
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j]= 0;
//构造魔方阵
i= 0;
j= n/2;
a[i][j]= 1; //放在第一行的中间一列
k= 2;
while(k<=n*n)
{
i= i-1; //行号减1
j= j+1; //列号加1
if(i<0 && j>n-1) //如果上一个数位与第1行第n列,当前的数应在上一个数的下面
{
i= i+2;
j= j-1;
}
else
{
//如果上一个数位与第1行,则当前的数应位与最后一行
if(i<0)
i= n-1;
//如果上一个数位与第n列,则当前的数应位与第1列
if(j>n-1)
j= 0;
}
if(a[i][j]==0) //当前的数保存到数组中
a[i][j]= k;
else //如果已经有数存在你,则放在上一个数的下面
{
i= i+2;
j= j-1;
a[i][j]= k;
}
k++; //k增加1,准备存放下一个数
}
//输出魔方阵
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
参考文献:《The Function and Algorithm of Program Language C/C++》