当前位置:网站首页>acwing 843. N-queen problem
acwing 843. N-queen problem
2022-07-07 04:38:00 【_ Liu Xiaoyu】
n− The Queen's problem means that n Put a queen in n×n On my chess board , So that the queen can't attack each other , That is, no two Queens can be in the same line 、 On the same column or slash .

Now, given an integer n, Please output all the pieces that meet the conditions .
Input format
All in one line , Contains integers n.
Output format
Each solution accounts for n That's ok , Each line outputs a length of n String , Used to represent the complete chessboard state .
among . Indicates that the grid status of a position is empty ,Q The queen is placed on the square indicating a certain position .
After the output of each scheme is completed , Output a blank line .
Be careful : There must be no extra spaces at the end of the line .
The order of output schemes is arbitrary , As long as there is no repetition and no omission .
Data range
1≤n≤9
sample input :
4
sample output :
.Q…
…Q
Q…
…Q.
…Q.
Q…
…Q
.Q…
This question is also DFS, It can be arranged according to
solution 1: Enumerate by row ( It's also the same question Full Permutation Allied )
It can be remembered as a template

#include <iostream>
using namespace std;
const int N = 20;
// bool Array is used to determine whether the next location of the search is feasible
// col Column ,dg Diagonals ,udg Anti diagonal
// g[N][N] Used to save path
int n;
char g[N][N];
bool col[N], dg[N], udg[N];
void dfs(int u) {
// u == n It means that we have searched n That's ok , So output this path
if (u == n) {
for (int i = 0; i < n; i ++ ) puts(g[i]); // Equivalent to cout << g[i] << endl;
puts(""); // Line break
return;
}
// enumeration u This business , Search for legal Columns , // Here, we can regard line as y, Column as x
// Here is the enumeration number u That's ok , The first i Column , Whether to release the queen , u= y, i = x after ===》 The diagonal is u + i、u - i + n
for (int i = 0; i < n; i ++ )
// prune ( For points that do not meet the requirements , No more searching )
if (!col[i] && !dg[u + i] && !udg[n - i + u])
{
g[u][i] = 'Q';
col[i] = dg[u + i] = udg[n - i + u] = true;
dfs(u + 1);
col[i] = dg[u + i] = udg[n - i + u] = false;
g[u][i] = '.'; // Restore the scene
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i ++ )
for (int j = 0; j < n; j ++ )
g[i][j] = '.';
dfs(0);
return 0;
}
Method 2: Enumerate according to each element
Every position has 2 In this case , Put it or not , There is... In all n2
Time complexity : O(2 Of n2 Power ), I can't fight it out , Forgive me
Schematic diagram : Draw like this 
Ideas : Search step by step according to each position .
code:
// Different search order Time complexity is different So the search order is very important !
#include <iostream>
using namespace std;
const int N = 20;
int n;
char g[N][N];
bool row[N], col[N], dg[N], udg[N]; // Because it's a search , So I added row
// s Indicates the number of queens that have been put on
void dfs(int x, int y, int s)
{
// Deal with situations beyond the boundary , Whether to put this directly in one line or not , After walking , Jump to the next line to start
if (y == n) y = 0, x ++ ;
if (x == n) {
// x==n Description has been enumerated n^2 It's a place
if (s == n) {
// s==n It means that it was successfully put on n A queen
for (int i = 0; i < n; i ++ ) puts(g[i]);
puts("");
}
return;
}
// Branch 1: Put the queen
if (!row[x] && !col[y] && !dg[x + y] && !udg[x - y + n]) {
g[x][y] = 'Q';
row[x] = col[y] = dg[x + y] = udg[x - y + n] = true;
dfs(x, y + 1, s + 1);
row[x] = col[y] = dg[x + y] = udg[x - y + n] = false;
g[x][y] = '.';
}
// Branch 2: Don't let the queen go
dfs(x, y + 1, s);
}
int main() {
cin >> n;
for (int i = 0; i < n; i ++ )
for (int j = 0; j < n; j ++ )
g[i][j] = '.';
dfs(0, 0, 0);
return 0;
}
边栏推荐
- AI表现越差,获得奖金越高?纽约大学博士拿出百万重金,悬赏让大模型表现差劲的任务
- 【实践出真理】import和require的引入方式真的和网上说的一样吗
- Implementation of JSTL custom function library
- Meaning of 'n:m' and '1:n' in database design
- Network Security Learning - Information Collection
- [written to the person who first published the paper] common problems in writing comprehensive scientific and Technological Papers
- Is there any way to bookmark the code in the visual studio project- Is there a way to bookmark code in a Visual Studio project?
- EasyCVR集群版本添加RTSP设备提示服务器ID错误,该如何解决?
- ACL2022 | 分解的元学习小样本命名实体识别
- Unit test asp Net MVC 4 Application - unit testing asp Net MVC 4 apps thoroughly
猜你喜欢

The request request is encapsulated in uni app, which is easy to understand
![[OA] excel document generator: openpyxl module](/img/e3/e6a13a79ad9023cf263d1926a224b5.png)
[OA] excel document generator: openpyxl module

What about the collapse of win11 playing pubg? Solution to win11 Jedi survival crash
![[system management] clear the icon cache of deleted programs in the taskbar](/img/cc/7aff85f1a33ef390623652eadb6f03.png)
[system management] clear the icon cache of deleted programs in the taskbar

Ssm+jsp realizes enterprise management system (OA management system source code + database + document +ppt)

SSM+jsp实现仓库管理系统,界面那叫一个优雅
![[on automation experience] the growth path of automated testing](/img/28/38d82cbdc7ed249d376fff264d1b5d.png)
[on automation experience] the growth path of automated testing

buildroot的根文件系统提示“depmod:applt not found”

Camera calibration (I): robot hand eye calibration

NTU notes 6422quiz review (1-3 sections)
随机推荐
【自动化经验谈】自动化测试成长之路
Golang calculates constellations and signs based on birthdays
What is CGI, IIS, and VPS "suggested collection"
C # use Siemens S7 protocol to read and write PLC DB block
[coded font series] opendyslexic font
Camera calibration (I): robot hand eye calibration
Case reward: Intel brings many partners to promote the innovation and development of multi domain AI industry
Kivy tutorial of setting the size and background of the form (tutorial includes source code)
1.19.11. SQL client, start SQL client, execute SQL query, environment configuration file, restart policy, user-defined functions, constructor parameters
Win11玩绝地求生(PUBG)崩溃怎么办?Win11玩绝地求生崩溃解决方法
树与图的深度优先遍历模版原理
SQL where multiple field filtering
什么是Web3
Intel David tuhy: the reason for the success of Intel aoten Technology
Lecture 3 of "prime mover x cloud native positive sounding, cost reduction and efficiency enhancement lecture" - kubernetes cluster utilization improvement practice
JS form get form & get form elements
Lessons and thoughts of the first SQL injection
Hardware development notes (10): basic process of hardware development, making a USB to RS232 module (9): create ch340g/max232 package library sop-16 and associate principle primitive devices
Kotlin compose text supports two colors
Digital chemical plants realize the coexistence of advantages of high quality, low cost and fast efficiency