控制台输入皇后的个数,n皇后问题,c语言代码
时间: 2024-10-27 10:05:27 浏览: 33
N皇后问题的解决方法
n皇后问题是经典的计算机科学问题,它要求在一个 n×n 的棋盘上放置 n 个皇后,使得任意两个皇后都不在同一行、同一列,以及对角线上。用户通常需要提供皇后数量 n 来构建问题实例。
在 C 语言中,解决这个问题的一种常见方法是通过回溯法(Backtracking)。下面是一个简单的示例代码片段:
```c
#include <stdio.h>
#define N 8 // 修改这里以适应不同大小的棋盘
int isSafe(int row, int col, int board[N]) {
// 检查列冲突
for (int i = 0; i < row; i++) {
if (board[i] == col)
return 0;
}
// 检查左上方对角线冲突
int di = row - col;
for (int i = 0; i < di; i++)
if (board[i] == col + i)
return 0;
// 检查右上方对角线冲突
di = N - row - col;
for (int i = 0; i < di; i++)
if (board[row + i] == col + i)
return 0;
return 1;
}
void solveNQueens(int board[N], int row) {
if (row == N) { // 如果所有皇后都放好,成功解决方案
for (int i = 0; i < N; i++) {
printf("%d ", board[i]);
}
printf("\n");
return;
}
// 尝试在每一列放置皇后
for (int col = 0; col < N; col++) {
if (isSafe(row, col, board)) {
board[row] = col;
solveNQueens(board, row + 1); // 继续放置下一行的皇后
}
}
}
int main() {
int n = <从控制台获取用户输入>; // 提示用户输入皇后数量
int board[N];
memset(board, -1, sizeof(board)); // 初始化所有位置为 -1
printf("Enter the number of queens: ");
scanf("%d", &n);
solveNQueens(board, 0);
return 0;
}
```
这个程序首先询问用户输入皇后数量(例如,`scanf("%d", &n)`),然后通过递归调用 `solveNQueens()` 函数寻找解决方案。如果用户输入的值不是正整数,或者大于棋盘允许的最大尺寸,程序可能需要添加错误处理代码。
阅读全文