P1406 20分求助!不知道哪错了
查看原帖
P1406 20分求助!不知道哪错了
169756
zcayyds楼主2022/2/19 17:31
#include<bits/stdc++.h>
using namespace std;
int n,s,a[20],h[6],l[6],dia[3],ch[6][6];
bool v[20];
void dfs(int x){
	if(x>n*n){
		if(dia[0]!=s)return;
		if(dia[1]!=s)return;
		for(int i=1;i<=n;i++){
 			if(h[i]!=s)return;
			if(l[i]!=s)return;
		}
		for(int i=1;i<=n;i++,cout<<endl)
			for(int j=1;j<=n;j++)
				cout<<ch[i][j]<<' ';
		exit(0);
	}
	int row=(x+n-1)/n;
	int col=x%n==0?n:x%n;
	for(int i=1;i<=n*n;i++){
		if(v[i])continue;
		if(h[row]+a[i]>s)break;
		if(l[col]+a[i]>s)break;
		if(row==col&&dia[0]+a[i]>s)break;
		if(row+col==n+1&&dia[1]+a[i]>s)break;
		h[row]+=a[i];
		l[col]+=a[i];
		if(row==col)dia[0]+=a[i];
		if(row+col==n+1)dia[1]+=a[i];
		ch[row][col]=a[i];
		v[i]=1;
		dfs(x+1);
		h[row]-=a[i];
		l[col]-=a[i];
		if(row==col)dia[0]-=a[i];
		if(row+col==n+1)dia[1]-=a[i];
		v[i]=0;
	}
	return;
} 
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n*n;i++){
		cin>>a[i];
		s+=a[i];
	}
	sort(a+1,a+1+n*n);
	s/=n;
	
	cout<<s<<endl;
	dfs(1);
	return 0;
}
2022/2/19 17:31
加载中...