21xrx.com
2025-03-29 09:49:49 Saturday
文章检索 我的文章 写文章
C++八皇后问题代码
2023-07-03 01:36:41 深夜i     19     0
C++ 八皇后问题 代码

C++八皇后问题指的是在一个八行八列的棋盘上,放置八个皇后,并满足任意两个皇后不能在同一行、同一列和同一对角线上。

以下是C++实现八皇后问题的代码:

#include <iostream>
using namespace std;
bool chessboard[8][8]; // 棋盘
bool check(int row, int col) {
  for (int i = 0; i < row; i++) {
    if (chessboard[i][col])
      return false;
    
  }
  for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
    if (chessboard[i][j])
      return false;
    
  }
  for (int i = row - 1, j = col + 1; i >= 0 && j < 8; i--, j++) {
    if (chessboard[i][j])
      return false;
    
  }
  return true;
}
void solve(int row) {
  if (row == 8) { // 找到解
    for (int i = 0; i < 8; i++) {
      for (int j = 0; j < 8; j++) {
        if (chessboard[i][j])
          cout << "Q";
         else
          cout << ".";
        
      }
      cout << endl;
    }
    cout << endl;
    return;
  }
  for (int i = 0; i < 8; i++) { // 放置皇后
    if (check(row, i)) {
      chessboard[row][i] = true;
      solve(row + 1);
      chessboard[row][i] = false;
    }
  }
}
int main() {
  solve(0);
  return 0;
}

代码中的`check`函数用于判断当前位置是否可以放置皇后,分别检查同一列、左上角到右下角和右上角到左下角对角线上是否有皇后。

`solve`函数递归找到解,对于每一行,从左到右依次放置皇后,如果当前位置可以放置皇后,则继续往下一行寻找解,否则回溯到上一行重新选择位置。

最后,在`main`函数中调用`solve`函数开始查找解。

运行代码后,会输出所有的八皇后问题的解。

  
  

评论区

请求出错了