Acwing 843. n-皇后问题
n-皇后问题是指将 n 个皇后放在 n∗n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。

现在给定整数n,请你输出所有的满足条件的棋子摆法。
输入格式
共一行,包含整数n。
输出格式
每个解决方案占n行,每行输出一个长度为n的字符串,用来表示完整的棋盘状态。
其中”.”表示某一个位置的方格状态为空,”Q”表示某一个位置的方格上摆着皇后。
每个方案输出完成后,输出一个空行。
数据范围
1≤n≤91≤n≤9
输入样例:
4
输出样例:
.Q..
...Q
Q...
..Q.
..Q.
Q...
...Q
.Q..
第一种解法

思路:如上图,只需要判断列,左斜线(y = -x + b --> b = x + y)和右斜线(y = x + b--> b = y - x)三种情况,其中b(截距)就是我们的在格子的位置
#include<iostream> using namespace std; const int N = ;
int n;
char g[N][N];
bool col[N],dg[N],udg[N]; void dfs(int y){
if(n == y){
for(int i = ;i < n;i++) puts(g[i]);
puts("");
return;
} for(int i = ;i < n;i++){
if(col[i] == && dg[n + y - i] == && udg[ y + i] == ){
g[y][i] = 'Q';
col[i] = dg[n + y - i] = udg[y + i] = true;
dfs(y + );
g[y][i] = '.';
col[i] = dg[n + y - i] = udg[y + i] = false;
}
} } int main(){
scanf("%d",&n);
for(int i = ;i < n;i++)
for(int j = ;j < n;j++)
g[i][j] = '.';
dfs();
return ;
}
第二种解法
思路:每一个格子有放还是不放两种情况,顺次判断,时间复杂度n^2
//
#include<iostream> using namespace std; const int N = ;
int n;
char g[N][N];
bool row[N],col[N],dg[N],udg[N]; void dfs(int x,int y,int s){
if(y == n) y = ,x++;//如果出界就转回来 if(x == n){//枚举到最后一行
//这里有可能皇后不够
if(s == n){//如果摆放的皇后等于n,说明找到了一组解
for(int i = ;i < n;i++) printf("%s\n",g[i]);
puts("");
}
return;
}
//枚举格子的两种选择
//第一种是不放皇后
dfs(x,y+,s);//直接递归到下一个格子就可以了 //第二种是放皇后
if(!row[x] && !col[y] && !dg[n + x - y] && !udg[x + y]){
g[x][y] = 'Q';
row[x] = col[y] = dg[n + x - y] = udg[x + y] = true;
dfs(x,y + ,s + );
row[x] = col[y] = dg[n + x - y] = udg[x + y] = false;
g[x][y] = '.';
}
} int main(){
scanf("%d",&n);
for(int i = ;i < n;i++)
for(int j = ;j < n;j++)
g[i][j] = '.';
dfs(,,);//从左上角开始搜索
return ;
}
Acwing 843. n-皇后问题的更多相关文章
- 递归实现n(经典的8皇后问题)皇后的问题
问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- [LeetCode] N-Queens II N皇后问题之二
Follow up for N-Queens problem. Now, instead outputting board configurations, return the total numbe ...
- [LeetCode] N-Queens N皇后问题
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- N皇后问题—初级回溯
N皇后问题,最基础的回溯问题之一,题意简单N*N的正方形格子上放置N个皇后,任意两个皇后不能出现在同一条直线或者斜线上,求不同N对应的解. 提要:N>13时,数量庞大,初级回溯只能保证在N< ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- N皇后问题
题目描述 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个后,任何2个皇后不妨在同一行或同 ...
- LeetCode:N-Queens I II(n皇后问题)
N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...
- 八皇后问题_Qt_界面程序实现
//核心代码如下 //Queen--放置皇后 #include "queue.h" queue::queue() { *; ; this->board = new bool[ ...
随机推荐
- python图像处理:一福变五福
快过年了,各种互联网产品都出来撒红包.某宝一年一度的“集五福活动”更是成为每年的必备活动之一. 虽然到最后每人大概也就分个两块钱,但作为一个全民话题,大多数人还是愿意凑凑热闹. 毕竟对于如今生活在大城 ...
- Educational Codeforces Round 78 (Rated for Div. 2)B. A and B(1~n的分配)
题:https://codeforces.com/contest/1278/problem/B 思路:还是把1~n分配给俩个数,让他们最终相等 假设刚开始两个数字相等,然后一个数字向前走了abs(b- ...
- MQ消息队列的12点核心原理总结
1. 消息生产者.消息者.队列 消息生产者Producer:发送消息到消息队列. 消息消费者Consumer:从消息队列接收消息. Broker:概念来自与Apache ActiveMQ,指MQ的服务 ...
- SOA,ROA 比较
1.SOA 面向服务架构 业务被抽象成服务 SOA架构中的对外服务一般都由web service来暴露 SOA架构中的内部服务一般由某种高效的RPC调用来暴露,当然了 也可以用web service来 ...
- Windows环境搭建 face_recognition,dlib
文章参考:https://blog.csdn.net/hongbin_xu/article/details/76284134 文章参考:https://blog.csdn.net/weixin_404 ...
- 信息检索盛会 微软“领衔主演”——记ACM SIGIR 2013信息检索国际会议
微软"领衔主演"--记ACM SIGIR 2013信息检索国际会议" title="信息检索盛会 微软"领衔主演"--记ACM SIGIR ...
- VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【C#版】
VSTO中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在ThisAddin.cs这个默认文件中. 大家可以在Visual Studio中创建 ...
- maven setting.xml说明
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- 3)小案例三,加乐前端入口index.php
之前的代码没有什么改动,唯一改动的就是我在之前的目录结构中加了 index.php作为前端的入口文件 目前,我的文件目录关系是: 然后我的index.php代码内容是: <?php /** * ...
- Differential Calculus
Taylor's Formula Theorem 1.1. Let \(f\): \(I=(c,d)->\mathbb{R}\) be a n-times differentiable func ...