用c语言写一个通过深度优先算法将1~9填入九宫格中使横竖对角线加起来都等于15的代码
时间: 2024-02-24 13:58:43 浏览: 86
1-9个数摆放成一个正方形,横竖和对角线和都为15
好的,下面是用C语言写的代码:
```c
#include <stdio.h>
int grid[3][3]; // 九宫格
int used[10]; // 标记数字是否被使用过
// 检查当前填入数字是否合法
int check(int x, int y, int num) {
// 检查行和列
for (int i = 0; i < 3; i++) {
if (grid[x][i] == num || grid[i][y] == num) {
return 0;
}
}
// 检查对角线
if (x == y && (grid[0][0] + grid[1][1] + grid[2][2] + num) != 15) {
return 0;
}
if (x + y == 2 && (grid[0][2] + grid[1][1] + grid[2][0] + num) != 15) {
return 0;
}
return 1;
}
// 深度优先搜索
void dfs(int x, int y) {
// 如果已经填满,输出结果
if (x == 3 && y == 0) {
printf("Solution:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", grid[i][j]);
}
printf("\n");
}
return;
}
// 如果当前数字已经填好,搜索下一个位置
if (grid[x][y] != 0) {
if (y == 2) {
dfs(x + 1, 0);
} else {
dfs(x, y + 1);
}
return;
}
// 枚举可以填入的数字
for (int i = 1; i <= 9; i++) {
if (!used[i] && check(x, y, i)) {
used[i] = 1;
grid[x][y] = i;
if (y == 2) {
dfs(x + 1, 0);
} else {
dfs(x, y + 1);
}
used[i] = 0;
grid[x][y] = 0;
}
}
}
int main() {
dfs(0, 0);
return 0;
}
```
这段代码使用深度优先搜索,枚举每个位置可以填入的数字,然后递归搜索下一个位置。在搜索过程中,使用 `check` 函数来判断当前填入的数字是否合法,如果合法则继续搜索下一个位置,否则回溯到上一个位置重新填数。最后输出找到的解。
阅读全文