输入一个矩阵的行列数量,生成一个螺旋矩阵,比如输入3,
则打印:
1 2 38 9 4
7 6 5
一圈一圈从外向内,填满螺旋矩阵。依次 从左往右,从上往下,从右往左,从下往上 依次循环。直到填满为止。
其实是有规律的,假如是 N 螺旋,第一圈(最外圈)依次是 从左往右填 N 个数 ,从上往下 填 N-1 个数,从右往左 填 N-1 个数,从下往上 填 N-2 个数。这样完成了最外圈的数.
次外圈 从左往右填的数的个数是外圈从下往上 填的个数,依次类推。知道要填的 个数 变成了 0,即完成了螺旋矩阵的赋值。
--------------N----------------
| |
| |
N-2 N-1
| |
| |
#include<iostream>
#include<iomanip>
using namespace std;
int fun(int len)
{
int **data,m = len;
data = (int **)malloc(len * sizeof(int *));
int i,j = -1,k,l = 1;
for(i = 0;i < len;i++)
{
data[i] = (int *)malloc(len * sizeof(int));
}
i = 0;
while(m > 0)
{
for(k = 1;k <= m;k++) //从左往右
{
data[i][++j] = l++;
}
m--;
for(k = 1;k <= m;k++) //从上往下
{
data[++i][j] = l++;
}
for(k = 1;k <= m;k++) //从右往左
{
data[i][--j] = l++;
}
m--;
for(k = 1;k <= m;k++) //从下往上
{
data[--i][j] = l++;
}
}
for(i = 0;i < len;i++)
{
for(j = 0;j < len;j++)
{
cout << setw(4) << data[i][j] << " ";
}
cout << endl;
}
return 0;
}
int main()
{
fun(6);
return 0;
}