T-T
2024-07-27 16:43:25
发布于:上海
#include <iostream>
#include <algorithm>
using namespace std;
int visited[15];
int matrix[5][5];
int answer[5][5];
bool isUnique = true;
// 检查是否为幻方
bool checkMagicSquare() {
int targetSum = matrix[1][1] + matrix[1][2] + matrix[1][3];
// 检查行
for (int i = 1; i <= 3; i++) {
int rowSum = 0;
for (int j = 1; j <= 3; j++) {
rowSum += matrix[i][j];
}
if (rowSum != targetSum) return false;
}
// 检查列
for (int i = 1; i <= 3; i++) {
int colSum = 0;
for (int j = 1; j <= 3; j++) {
colSum += matrix[j][i];
}
if (colSum != targetSum) return false;
}
return true;
}
// 复制矩阵
void copyMatrix() {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
answer[i][j] = matrix[i][j];
}
}
return;
}
// 深度优先搜索还原
void dfs(int x, int y) {
if (y == 4) {
x += 1;
y = 1;
}
if (x == 4) {
if (checkMagicSquare()) {
if (isUnique) {
isUnique = false;
copyMatrix();
} else {
cout << "Too Many" << endl;
exit(0);
}
}
return;
}
if (matrix[x][y] != 0) {
dfs(x, y + 1);
return;
}
for (int i = 1; i <= 9; i++) {
if (visited[i]) continue;
visited[i] = 1;
matrix[x][y] = i;
dfs(x, y + 1);
matrix[x][y] = 0;
visited[i] = 0;
}
return;
}
int main() {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
cin >> matrix[i][j];
visited[matrix[i][j]] = 1;
}
}
dfs(1, 1);
if (!isUnique) {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
cout << answer[i][j] << " ";
}
cout << endl;
}
} else {
cout << "Too Many";
}
return 0;
}
这里空空如也
有帮助,赞一个