【题解】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) $

完结撒花!

posted @ 2024-11-21 19:50  sunxuhetai  阅读(14)  评论(1)    收藏  举报