思路:不能右则下,不能下则左,不能左则上,不能上则右。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,j=1,k=1,bj=1,a[10][10];
cin>>n;
memset(a,0,sizeof(a));
for(int i=1;i<=n*n;i++){
if(k+1<=n && a[j][k+1]==0 && bj==1){
a[j][k]=i;
k++;
}
else if(j+1<=n && a[j+1][k]==0){
a[j][k]=i;
j++;
}
else if(k>1 && a[j][k-1]==0){
a[j][k]=i;
k--;
}
else if(j>0 && a[j][k]==0){
a[j][k]=i;
j--;
if(a[j-1][k]==0) bj=0;
else bj=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++){
printf("%3d ",a[i][j]);
}
cout<<endl;
}
}