TLE求助
查看原帖
TLE求助
951987
litchi36楼主2024/11/9 21:13
#include<iostream>
#include<algorithm>
using namespace std;
int a[12][12], n, vis[20], s, k[20];
bool flag = 0;
bool pd() {
	int sum = 0;
	for (int j = 1; j <= n; j++) {
		sum = 0;
		for (int i = 1; i <= n; i++) {
			sum += a[i][j];
		}
		if (sum != s) {
			return 0;
		}
	}
	sum = 0;
	for (int i = 1; i <= n; i++) {
		sum += a[i][i];
	}
	if (sum != s) {
		return 0;
	}
	sum = 0;
	for (int i = 1; i <= n;) {
		for (int j = n; j >= 1; j--) {
			sum += a[i][j];
			i++;
		}
	}
	if (sum != s) {
		return 0;
	} else {
		return 1;
	}
}
void dfs(int x, int y) {
	if (y == n + 1) {
		dfs(x + 1, 1);
		return;
	}
	if (x == n + 1) {
		if (flag == 1) {
			return;
		}
		if (pd()) {
			for (int i = 1; i <= n; i++) {
				for (int j = 1; j <= n; j++) {
					cout << a[i][j] << " ";
				}
				cout << "\n";
			}
			flag = 1;
			return;
		}
	}
	if (y == n) {
		int t = 0;
		for (int i = 1; i < n; i++) {
			t = t + a[x][i];
		}
		for (int i = 1; i <= n * n; i++) {
			if (vis[i] == 0 && k[i] == s - t) {
				vis[i] = 1;
				a[x][y] = k[i];
				dfs(x + 1, 1);
				vis[i] = 0;
			}
		}
	} else {
		for (int i = 1; i <= n * n; i++) {
			if (vis[i] == 0) {
				vis[i] = 1;
				a[x][y] = k[i];
				dfs(x, y + 1);
				vis[i] = 0;
			}
		}
	}
}
int main() {
	cin >> n;
	for (int i = 1; i <= n * n; i++) {
		cin >> k[i];
		s = s + k[i];
	}
	s = s / n;
	sort(k + 1, k + 1 + n * n);
	cout << s << endl;
	dfs(1, 1);
	return 0;
}

2024/11/9 21:13
加载中...