21xrx.com
2024-09-20 02:09:36 Friday
登录
文章检索 我的文章 写文章
C++八皇后问题代码
2023-07-03 01:36:41 深夜i     --     --
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`函数开始查找解。

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复