#include<iostream>
#include<malloc.h>
using namespace std;
int main()
{
int **p=NULL;
int n,i,j,k=1,line,row;
cout<<"请输入矩阵的行数:";
cin>>n;
if((p=(int**)malloc(sizeof(int**)*n))==NULL)
{
cout<<"不能分配内存!"<<endl;
return 1;
}
for(i=0;i<n;i++)
{
if((p[i]=(int*)malloc(sizeof(int*)*n))==NULL)
{
cout<<"不能分配内存!"<<endl;
return 1;
}
}
for(i=0,j=0;k<=n*n;i++,j++)
{
for(row=j;row<n-j;row++)
{
p[i][row]=k++;
}
for(line=i+1;line<n-i;line++)
{
p[line][n-j-1]=k++;
}
for(row=n-j-2;row>=j;row--)
{
p[n-i-1][row]=k++;
}
for(line=n-i-2;line>i;line--)
{
p[line][j]=k++;
}
}
cout<<"输出螺旋矩阵:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<" "<<p[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<n;i++)//释放行指针
{
free(p[i]);
p[i]=NULL;
}
free(p);//释放指针
p=NULL;
return 0;
}