当前位置:网站首页>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;
}
边栏推荐
- 每人每年最高500万经费!选人不选项目,专注基础科研,科学家主导腾讯出资的「新基石」启动申报
- Web3 社区中使用的术语
- 軟件測試之網站測試如何進行?測試小攻略走起!
- 视频融合云平台EasyCVR视频广场左侧栏列表样式优化
- [team learning] [34 sessions] Alibaba cloud Tianchi online programming training camp
- B站大佬用我的世界搞出卷积神经网络,LeCun转发!爆肝6个月,播放破百万
- namespace基础介绍
- The request request is encapsulated in uni app, which is easy to understand
- 程序员上班摸鱼,这么玩才高端!
- Kivy tutorial of setting the size and background of the form (tutorial includes source code)
猜你喜欢
深耕开发者生态,加速AI产业创新发展 英特尔携众多合作伙伴共聚
Camera calibration (I): robot hand eye calibration
Case reward: Intel brings many partners to promote the innovation and development of multi domain AI industry
[ArcGIS tutorial] thematic map production - population density distribution map - population density analysis
Easycvr cannot be played using webrtc. How to solve it?
EasyCVR视频广场点击播放时,主菜单高亮效果消失问题的修复
Continuous learning of Robotics (Automation) - 2022-
数学分析_笔记_第10章:含参变量积分
Deeply cultivate the developer ecosystem, accelerate the innovation and development of AI industry, and Intel brings many partners together
Ssm+jsp realizes the warehouse management system, and the interface is called an elegant interface
随机推荐
广告归因:买量如何做价值衡量?
[written to the person who first published the paper] common problems in writing comprehensive scientific and Technological Papers
Network Security Learning - Information Collection
[team learning] [34 sessions] Alibaba cloud Tianchi online programming training camp
组织实战攻防演练的5个阶段
DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
Common methods of list and map
《原动力 x 云原生正发声 降本增效大讲堂》第三讲——Kubernetes 集群利用率提升实践
Easycvr cannot be played using webrtc. How to solve it?
System framework of PureMVC
架构实战训练营|课后作业|模块 6
深耕开发者生态,加速AI产业创新发展 英特尔携众多合作伙伴共聚
How to conduct website testing of software testing? Test strategy let's go!
True global ventures' newly established $146million follow-up fund was closed, of which the general partner subscribed $62million to invest in Web3 winners in the later stage
AI表现越差,获得奖金越高?纽约大学博士拿出百万重金,悬赏让大模型表现差劲的任务
Five years of automated testing, and finally into the ByteDance, the annual salary of 30W is not out of reach
The easycvr platform is connected to the RTMP protocol, and the interface call prompts how to solve the error of obtaining video recording?
未婚夫捐5亿美元给女PI,让她不用申请项目,招150位科学家,安心做科研!
[on automation experience] the growth path of automated testing
Two divs are on the same line, and the two divs do not wrap "recommended collection"