[C++][算法基础]n-皇后问题(DFS)

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

1_597ec77c49-8-queens.png

现在给定整数 n,请你输出所有的满足条件的棋子摆法。

输入格式

共一行,包含整数 n。

输出格式

每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。

其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。

每个方案输出完成后,输出一个空行。

注意:行末不能有多余空格。

输出方案的顺序任意,只要不重复且没有遗漏即可。

数据范围

1≤n≤9

输入样例:
4
输出样例:
.Q..
...Q
Q...
..Q.

..Q.
Q...
...Q
.Q..

代码:

#include<iostream>
using namespace std;

const int N = 20;
char path[N][N];
int row[N],k[N],uk[N];
int n;

void dfs(int now){
    if(now == n){
        for(int p = 0;p<n;p++){
            for(int q = 0;q<n;q++){
                cout<<path[p][q];
            }
            cout<<endl;
        }
        cout<<endl;
    }else{
        for(int j = 0;j<n;j++){
            if(row[j] == 0 && k[j + now] == 0 && uk[n+j-now] == 0){
                row[j] = 1;
                k[j + now] = 1;
                uk[n+j-now] = 1;
                path[now][j] = 'Q';
                dfs(now+1);
                row[j] = 0;
                k[j + now] = 0;
                uk[n+j-now] = 0;
                path[now][j] = '.';
            }
        }
    }
}

int main(){
    cin>>n;
    for(int p = 0;p<n;p++){
        for(int q = 0;q<n;q++){
            path[p][q] = '.';
            
        }
        row[p] = 0;
        k[p] = 0;
        uk[p] = 0;
    }
    dfs(0);
    return 0;
}

 

相关推荐

  1. 算法基础n-皇后问题

    2024-04-13 20:54:01       47 阅读
  2. c语言算法之深度优先搜索(n皇后问题

    2024-04-13 20:54:01       14 阅读
  3. 算法设计与分析 | N皇后问题

    2024-04-13 20:54:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 20:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 20:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 20:54:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 20:54:01       20 阅读

热门阅读

  1. 大语言模型LLM《提示词工程指南》学习笔记03

    2024-04-13 20:54:01       15 阅读
  2. 从 PostgreSQL 15 升级到 16

    2024-04-13 20:54:01       15 阅读
  3. 人工智能研究生前置知识—科学计算库numpy

    2024-04-13 20:54:01       17 阅读
  4. linux中如何查看一个文件的起始结尾和中间

    2024-04-13 20:54:01       13 阅读
  5. 多模态 Multi-Module的创新点

    2024-04-13 20:54:01       16 阅读
  6. SpringBoot的启动原理

    2024-04-13 20:54:01       15 阅读
  7. 什么是UWB定位技术,国产UWB芯片厂有哪些?

    2024-04-13 20:54:01       12 阅读
  8. C++矩阵

    2024-04-13 20:54:01       12 阅读
  9. openEuler-22.03 软件包安装

    2024-04-13 20:54:01       15 阅读
  10. Linux中账号登陆报错access denied

    2024-04-13 20:54:01       14 阅读
  11. 【使用Linux的基础和小技巧】

    2024-04-13 20:54:01       16 阅读
  12. ActiveMQ 03 整合SpringBoot

    2024-04-13 20:54:01       13 阅读
  13. 补上ROS键盘遥控机器人的keys_to_twist_ramps.py文件

    2024-04-13 20:54:01       16 阅读