题目描述
给定一个正整数n(1<=n<=20),画出螺旋矩阵。
输入
输入: 一个正整数n
输出
输出:
对应画出螺旋矩阵
样例输入复制
5
样例输出复制
1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9
提示
每一个数后输出空格
#include<iostream>
#include <algorithm>
#include<cstring>
using namespace std;
int n;
int main()
{
cin >> n;
int a[n][n];
memset(a, 0, sizeof(a));
a[0][0] = 1;
int flag=1;
int i=0,j=0,num=2;
int x=n,y=n,nx=0,ny=0;
while(true)
{
switch (flag)
{
case 1://自左向右
while(a[i][j+1]==0)
{
a[i][++j] = num++;
if(j==y-1)
{
flag=2;
y--;
break;
}
}
break;
case 2://自上而下
while(a[i+1][j]==0)
{
a[++i][j] = num++;
if(i==x-1)
{
flag=3;
x--;
break;
}
}
break;
case 3://自右向左
while(a[i][j-1]==0)
{
a[i][--j] = num++;
if(j==ny)
{
flag=4;
ny++;
break;
}
}
break;
case 4://自下而上
while(a[i-1][j]==0)
{
a[--i][j] = num++;
if(i==nx+1)
{
flag=1;
nx++;
break;
}
}
break;
}
if(num>n*n)break;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}