【题解】P2615 神奇的幻方
题面
前言
刚拿到题面:离谱的爆搜剪枝毒瘤题
看到 $ n $ 是奇数:直接做做完力!
正文
两句话秒了(这句也算)
罗伯法填幻方,直接模拟即可
代码
#include<iostream>
using namespace std;
const int maxn=48;
int n,a[maxn][maxn],x,y;
int main(){
cin>>n;
int x=1,y=(n+1)/2;
for(int i=1;i<=n*n;i++){
a[x][y]=i;
if(a[(x-2+n)%n+1][y%n+1]==0){
x=(x-2+n)%n+1;
y=y%n+1;
}else{
x=x%n+1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<' ';
}
cout<<endl;
}
return 0;
}
后记
补充一句:时间 $ O(n^2) $
完结撒花!