我用的就是直接暴力枚举,在Clion上看应该没问题提交了之后,我用了一次下载数据
输入:
3
输出:
8 1 6
3 5 7
4 9 2
与我自己在IDE上完全一样
附上代码,有没有大佬帮本蒟蒻看看这道题,麻烦啦!!!
#include "cstdio"
#include "iostream"
using namespace std;
typedef struct {
int k;
int x,y;
}Node;
int main (){
int N , k = 2;
cin>>N;
Node node[N*N+1];
for(int i=1;i<=N*N;i++)
node[i].k=0,node[i].x=0,node[i].y=0;
node[1].x=1;
node[1].y=(N+1)/2;
node[1].k=1;
for(k=2;k<=N*N;k++){
if(node[k-1].x==1&&node[k-1].y!=N)
node[k].k=1,node[k].x=N,node[k].y=node[k-1].y+1;
if(node[k-1].y==N&&node[k-1].x!=1)
node[k].k=1,node[k].x=node[k-1].x-1,node[k].y=1;
if(node[k-1].x==1&&node[k-1].y==N)
node[k].k=1,node[k].x=node[k-1].x+1,node[k].y=node[k-1].y;
int j=0;
if(node[k-1].x!=1&&node[k-1].y!=N){
for(int i=1;i<=k;i++){
if((node[i].x==node[k-1].x-1)&&(node[i].y==node[k-1].y+1)&&node[i].k){
j=i;
break;
}
}
if(j==0){
node[k].x=node[k-1].x-1;
node[k].y=node[k-1].y+1;
node[k].k=1;
}
if(node[j].k){
node[k].x=node[k-1].x+1;
node[k].y=node[k-1].y;
node[k].k=1;
}
}
}
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
for(int l=1;l<=N*N;l++){
if(node[l].x == i && node[l].y == j){
printf("%d ",l);
}
}
}
cout<<endl;
}
}