Share c++ 8 queens problem,

purplefrog940

New member
#8queensprobol #C ++ #backtracking #Recursion #Programming
## 8 vấn đề của nữ hoàng trong C ++

Vấn đề 8 Queens là một vấn đề kinh điển trong khoa học máy tính.Đó là một ví dụ về một vấn đề quay lại, và nó cũng là một cách tốt để tìm hiểu về đệ quy.

Vấn đề là tìm cách đặt tám nữ hoàng lên bàn cờ để không có nữ hoàng nào có thể tấn công một nữ hoàng khác.Một nữ hoàng có thể tấn công một nữ hoàng khác nếu họ ở cùng một hàng, cùng một cột hoặc cùng một đường chéo.

Dưới đây là một giải pháp đơn giản cho vấn đề 8 nữ hoàng trong C ++:

`` `C ++
#include <Istream>

sử dụng không gian tên STD;

// Hàm này kiểm tra xem một nữ hoàng có thể được đặt trên một hàng và cột nhất định.
bool issafe (board int [] [8], int row, int col) {
// Kiểm tra xem có nữ hoàng trong cùng một hàng không.
for (int i = 0; i <col; i ++) {
if (board [hàng] == 1) {
trả lại sai;
}
}

// Kiểm tra xem có nữ hoàng trong cùng một cột không.
for (int i = 0; i <row; i ++) {
if (board [col] == 1) {
trả lại sai;
}
}

// Kiểm tra xem có nữ hoàng trong cùng một đường chéo không.
for (int i = row-1, j = col-1; i> = 0 && j> = 0; i--, j--) {
if (board [j] == 1) {
trả lại sai;
}
}

// Kiểm tra xem có nữ hoàng trong cùng một đường chéo không.
for (int i = row+1, j = col+1; i <8 && j <8; i ++, j ++) {
if (board [j] == 1) {
trả lại sai;
}
}

// Nếu tất cả các séc được thông qua, thì nữ hoàng có thể được đặt trên hàng và cột đã cho.
trả lại đúng;
}

// Chức năng này đệ quy tìm tất cả các giải pháp cho vấn đề 8 Queens.
void giải quyết (board int [] [8], int row) {
// Nếu chúng tôi đã đạt đến hàng cuối cùng, thì chúng tôi đã tìm thấy một giải pháp.
if (hàng == 8) {
for (int i = 0; i <8; i ++) {
for (int j = 0; j <8; j ++) {
cout << board [j] << "";
}
cout << endl;
}
cout << endl;
}

// đệ quy cố gắng đặt một nữ hoàng trên mỗi cột trong hàng hiện tại.
for (int col = 0; col <8; col ++) {
if (iSSafe (board, hàng, col)) {
// Đặt nữ hoàng trên cột hiện tại.
Bảng [hàng] [col] = 1;

// gọi một cách đệ quy hàm giải quyết ở hàng tiếp theo.
giải (bảng, hàng + 1);

// Loại bỏ nữ hoàng khỏi cột hiện tại.
Bảng [hàng] [col] = 0;
}
}
}

int main () {
// Tạo bảng 8x8.
Bảng int [8] [8] = {0};

// Giải quyết vấn đề 8 Nữ hoàng.
giải quyết (bảng, 0);

trả lại 0;
}
`` `

Mã này sử dụng thuật toán đệ quy để tìm tất cả các giải pháp cho vấn đề 8 nữ hoàng.Thuật toán bắt đầu bằng cách đặt một nữ hoàng trên hàng đầu tiên của bảng.Sau đó, nó đệ quy để đặt một nữ hoàng trên mỗi cột vào hàng thứ hai.Nếu một nữ hoàng có thể được đặt trên một cột ở hàng thứ hai, thì thuật toán tự gọi mình ở hàng thứ ba.Quá trình này tiếp tục cho đến khi tất cả tám nữ hoàng có
=======================================
#8queensproblem #C++ #backtracking #Recursion #Programming
## 8 Queens Problem in C++

The 8 queens problem is a classic problem in computer science. It is an example of a backtracking problem, and it is also a good way to learn about recursion.

The problem is to find a way to place eight queens on a chessboard so that no queen can attack another queen. A queen can attack another queen if they are on the same row, the same column, or the same diagonal.

Here is a simple solution to the 8 queens problem in C++:

```c++
#include <iostream>

using namespace std;

// This function checks if a queen can be placed on a given row and column.
bool isSafe(int board[][8], int row, int col) {
// Check if there is a queen in the same row.
for (int i = 0; i < col; i++) {
if (board[row] == 1) {
return false;
}
}

// Check if there is a queen in the same column.
for (int i = 0; i < row; i++) {
if (board[col] == 1) {
return false;
}
}

// Check if there is a queen in the same diagonal.
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[j] == 1) {
return false;
}
}

// Check if there is a queen in the same anti-diagonal.
for (int i = row + 1, j = col + 1; i < 8 && j < 8; i++, j++) {
if (board[j] == 1) {
return false;
}
}

// If all of the checks passed, then the queen can be placed on the given row and column.
return true;
}

// This function recursively finds all solutions to the 8 queens problem.
void solve(int board[][8], int row) {
// If we have reached the last row, then we have found a solution.
if (row == 8) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
cout << board[j] << " ";
}
cout << endl;
}
cout << endl;
}

// Recursively try to place a queen on each column in the current row.
for (int col = 0; col < 8; col++) {
if (isSafe(board, row, col)) {
// Place the queen on the current column.
board[row][col] = 1;

// Recursively call the solve function on the next row.
solve(board, row + 1);

// Remove the queen from the current column.
board[row][col] = 0;
}
}
}

int main() {
// Create a 8x8 board.
int board[8][8] = {0};

// Solve the 8 queens problem.
solve(board, 0);

return 0;
}
```

This code uses a recursive algorithm to find all solutions to the 8 queens problem. The algorithm starts by placing a queen on the first row of the board. Then, it recursively tries to place a queen on each column in the second row. If a queen can be placed on a column in the second row, then the algorithm recursively calls itself on the third row. This process continues until all eight queens have
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top