用c++写一个n皇后问题代码
时间: 2024-05-12 16:16:38 浏览: 81
c++递归实现n皇后问题代码(八皇后问题)
好的,我可以为您提供一个C语言实现的n皇后问题代码:
```
#include <stdio.h>
#include <stdlib.h>
#define N 8 // 改变N的值可以求解不同规模的n皇后问题
int count = 0; // 记录解的个数
// 判断当前皇后的位置是否与已经摆放的皇后位置冲突
int is_conflict(int* board, int row, int col) {
int i;
for(i = 0; i < row; i++) {
if(board[i] == col|| abs(row-i) == abs(col-board[i])) {
return 1;
}
}
return 0;
}
// 递归求解n皇后问题
void nqueens(int* board, int row) {
int i, j;
if(row == N) {
printf("Solution %d: ", ++count);
for(i = 0; i < N; i++) {
printf("%d ", board[i]);
}
printf("\n");
}
else {
for(j = 0; j < N; j++) {
if(!is_conflict(board, row, j)) {
board[row] = j;
nqueens(board, row+1);
}
}
}
}
int main() {
int* board = (int*) malloc(N * sizeof(int));
nqueens(board, 0);
free(board);
return 0;
}
```
该代码通过递归的方式求解n皇后问题。在is_conflict函数中判断当前皇后的位置是否与已经摆放的皇后位置冲突,如果冲突则返回1,否则返回0。在nqueens函数中,通过循环遍历每一列,找到不冲突的位置,然后递归调用nqueens函数摆放下一行的皇后,直到求解完所有行之后打印解的位置。
另外,由于n皇后问题存在多解,该代码可以输出所有解的位置。
阅读全文