Share 8 queens problem c++ source code

ngoredrose

New member
## 8 Nữ hoàng sự cố C ++ Mã nguồn

Vấn đề 8 Queens là một vấn đề kinh điển trong khoa học máy tính.Đó là một vấn đề hoàn thành NP, có nghĩa là không có thuật toán thời gian đa thức được biết đến để giải quyết nó.Tuy nhiên, có một số thuật toán hiệu quả có thể được sử dụng để tìm giải pháp cho vấn đề.

Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách giải quyết vấn đề 8 nữ hoàng bằng C ++.Chúng tôi sẽ bắt đầu bằng cách xác định vấn đề và sau đó chúng tôi sẽ thảo luận về thuật toán mà chúng tôi sẽ sử dụng để giải quyết nó.Cuối cùng, chúng tôi sẽ cung cấp mã nguồn cho thuật toán.

### Vấn đề 8 nữ hoàng

Vấn đề 8 Nữ hoàng là một vấn đề trong đó bạn được cho một bàn cờ có 8 hàng và 8 cột.Mục tiêu là đặt 8 nữ hoàng lên bàn cờ để không có nữ hoàng nào có thể tấn công bất kỳ nữ hoàng nào khác.

Một nữ hoàng có thể tấn công bất kỳ mảnh nào khác trên cùng một hàng, cột hoặc đường chéo.Điều này có nghĩa là bạn không thể đặt hai nữ hoàng trên cùng một hàng, cột hoặc đường chéo.

### Thuật toán

Thuật toán mà chúng tôi sẽ sử dụng để giải quyết vấn đề 8 Queens là một thuật toán quay lại.Thuật toán quay lại là một loại thuật toán lặp có thể được sử dụng để giải quyết nhiều vấn đề khác nhau.

Thuật toán quay lại cho vấn đề 8 Queens hoạt động bằng cách bắt đầu với một bàn cờ trống.Thuật toán sau đó cố gắng đặt một nữ hoàng trên mỗi hàng của bàn cờ, mỗi lần một hàng.

Khi thuật toán cố gắng đặt một nữ hoàng trên một hàng cụ thể, trước tiên nó kiểm tra xem liệu có nữ hoàng nào có thể tấn công nữ hoàng mà nó đang cố gắng đặt.Nếu không có nữ hoàng nào có thể tấn công nữ hoàng mà nó đang cố gắng đặt, thì thuật toán đặt nữ hoàng lên bàn cờ và chuyển sang hàng tiếp theo.

Nếu có một nữ hoàng có thể tấn công nữ hoàng mà nó đang cố gắng đặt, thì thuật toán quay lại và cố gắng đặt nữ hoàng lên một hàng khác.

Thuật toán tiếp tục quay lại và cố gắng đặt các nữ hoàng trên các hàng khác nhau cho đến khi nó tìm thấy một giải pháp cho vấn đề.

### Mã nguồn

Sau đây là mã nguồn cho thuật toán quay lại mà chúng tôi đã sử dụng để giải quyết vấn đề 8 Queens:

`` `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ình vuông cụ thể trên bàn cờ.
bool issafe (board int [], 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 <row; i ++) {
if (board == col) {
trả lại sai;
}
}

// Kiểm tra xem có nữ hoàng trong cùng một cột không.
for (int i = row-1; i> = 0; i--) {
if (board == col - (hàng - i)) {
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) {
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 <8; i--, j ++) {
if (board == j) {
trả lại sai;
}
}

// Nếu nữ hoàng có thể được đặt trên quảng trường, hãy trả lại đúng.
trả lại đúng;
}

// Hàm này in giải pháp cho vấn đề 8 Nữ hoàng.
void printboard (board int []) {
for (int i = 0; i <8; i ++) {
for (int j = 0; j <8; j ++) {
cout << board [i * 8 + j] << "";
}
=======================================
## 8 Queens Problem C++ Source Code

The 8 queens problem is a classic problem in computer science. It is an NP-complete problem, meaning that there is no known polynomial-time algorithm to solve it. However, there are a number of efficient algorithms that can be used to find a solution to the problem.

In this article, we will show you how to solve the 8 queens problem using C++. We will start by defining the problem and then we will discuss the algorithm that we will use to solve it. Finally, we will provide the source code for the algorithm.

### The 8 Queens Problem

The 8 queens problem is a problem in which you are given a chessboard with 8 rows and 8 columns. The goal is to place 8 queens on the chessboard so that no queen can attack any other queen.

A queen can attack any other piece on the same row, column, or diagonal. This means that you cannot place two queens on the same row, column, or diagonal.

### The Algorithm

The algorithm that we will use to solve the 8 queens problem is a backtracking algorithm. Backtracking algorithms are a type of iterative algorithm that can be used to solve a wide variety of problems.

The backtracking algorithm for the 8 queens problem works by starting with an empty chessboard. The algorithm then tries to place a queen on each row of the chessboard, one row at a time.

When the algorithm tries to place a queen on a particular row, it first checks to see if there is any queen that can attack the queen that it is trying to place. If there is no queen that can attack the queen that it is trying to place, then the algorithm places the queen on the chessboard and moves on to the next row.

If there is a queen that can attack the queen that it is trying to place, then the algorithm backtracks and tries to place the queen on a different row.

The algorithm continues to backtrack and try to place the queens on different rows until it finds a solution to the problem.

### The Source Code

The following is the source code for the backtracking algorithm that we used to solve the 8 queens problem:

```c++
#include <iostream>

using namespace std;

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

// Check if there is a queen in the same column.
for (int i = row - 1; i >= 0; i--) {
if (board == col - (row - i)) {
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) {
return false;
}
}

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

// If the queen can be placed on the square, return true.
return true;
}

// This function prints the solution to the 8 queens problem.
void printBoard(int board[]) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
cout << board[i * 8 + j] << " ";
}
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top