该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
using namespace std;
int main()
{
const int right=1;
const int down=2;
const int left=3;
const int up=4;
int direction;
int n;
cout<
cin>>n;
int i;
int **p=new int*[n];
for(i=0;i
*(p+i)=new int[n];
for(i=0;i
for(int j=0;j
p[i][j]=0;
int value=1;
direction=right;
int row=0,col=0;
while(true) {
p[row][col]=value;
switch(direction)
{ case right:
++col;
if(col==n)
{
col--;
direction++;
break;
}
if(p[row][col]!=0)
{
col--;
direction++;
break;
}
value++;
break;
case down:
++row;
if(row==n)
{ row--;
direction++;
break;
}
if(p[row][col]!=0)
{ row--;
direction++;
break;
}
value++;
break;
case left:
--col;
if(col==-1)
{ col++;
direction++;
break;
}
if(p[row][col]!=0)
{ col++; direction++; break; }
value++;
break;
case up:
--row;
if(row==-1)
{ row++;
direction++;
break;
}
if(p[row][col]!=0)
{
row++;
direction++;
break;
}
value++;
break;
default:
break;
}
if(value==n*n)
{ p[row][col]=value;
break;
}
if(direction>4)
direction%=4;
}
int output_width=n*n;
int num_digits=1;
while(true)
{
if(output_width==0)
break;
else
{
output_width/=10;
num_digits++;
}
}
int j;
for( i=0;i
{
for(j=0;j
cout<
cout<
}
for( i=0;i
delete []*(p+i);
delete []p;
return 0;
}