用C语言如何写出解决八皇后问题的代码
时间: 2024-05-11 07:17:38 浏览: 126
可以使用回溯算法来解决八皇后问题,具体的C语言代码如下:
```
#include <stdio.h>
#define N 8
int board[N][N];
int is_attacked(int row, int col) {
int i, j;
// 判断横向是否有皇后
for (i = 0; i < N; i++)
if (board[row][i])
return 1;
// 判断纵向是否有皇后
for (i = 0; i < N; i++)
if (board[i][col])
return 1;
// 判断左上方是否有皇后
for (i = row, j = col; i >= 0 && j >= 0; i--, j--)
if (board[i][j])
return 1;
// 判断右上方是否有皇后
for (i = row, j = col; i >= 0 && j < N; i--, j++)
if (board[i][j])
return 1;
return 0;
}
int solve(int row) {
int col;
// 如果已经放置了八个皇后则返回1
if (row == N)
return 1;
// 尝试在当前行从第一列到第N列依次放置皇后
for (col = 0; col < N; col++) {
// 如果当前位置没有被攻击则可以放置皇后
if (!is_attacked(row, col)) {
board[row][col] = 1;
// 递归求解下一行
if (solve(row + 1))
return 1;
// 如果无法找到解则回溯,重置当前位置为0
board[row][col] = 0;
}
}
// 如果当前行无法放置皇后则返回0
return 0;
}
int main() {
int i, j;
// 初始化棋盘
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
board[i][j] = 0;
// 求解八皇后问题
if (solve(0)) {
// 输出解决方案
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%d ", board[i][j]);
printf("\n");
}
} else {
printf("No solution found\n");
}
return 0;
}
```
阅读全文