当前位置: 首页 > news >正文

DFS深搜

排列数字

题目:

给定一个整数 n𝑛,将数字 1∼n 排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出

输入格式

共一行,包含一个整数 n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤7

输入样例

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

 对于DFS深度搜索就像是一条路走到黑

在这里假如n=3,需要看一共有几种组合方法

红色的就是 深搜的路线;

对于这道题把思路转化成代码就是

#include<iostream>
using namespace std;
const int N = 10;
int path[N];//保存序列
int state[N];//数字是否被用过
int n;
void dfs(int u)
{
    if(u > n)//数字填完了,输出
    {
        for(int i = 1; i <= n; i++)//输出方案
            cout << path[i] << " ";
        cout << endl;
    }

    for(int i = 1; i <= n; i++)//空位上可以选择的数字为:1 ~ n
    {
        if(!state[i])//如果数字 i 没有被用过
        {
            path[u] = i;//放入空位
            state[i] = 1;//数字被用,修改状态
            dfs(u + 1);//填下一个位
            state[i] = 0;//回溯,取出 i
        }
    }
}

int main()
{

    cin >> n;
    dfs(1);
}

n-皇后问题 

题目:

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

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

输入格式· 

共一行,包含整数 n。

输出格式:

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

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

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

数据范围:

1<=n<=9

输入样例:

4

输出样例

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

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


DFS流程

//cpp
#include <iostream>
using namespace std;

const int N = 11;

char q[N][N];//存储棋盘
bool dg[N * 2], udg[N * 2], cor[N];//点对应的两个斜线以及列上是否有皇后

int n;

void dfs(int r)
{
    if(r == n)//放满了棋盘,输出棋盘
    {
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < n; j++)
                cout << q[i][j];
            cout << endl;
        }
        cout << endl;
        return;
    }

    for(int i = 0; i < n; i++)//第 r 行,第 i 列 是否放皇后
    {
        if(!cor[i] && !dg[i + r] && !udg[n - i + r])//不冲突,放皇后
        {
            q[r][i] = 'Q';
            cor[i] = dg[i + r] = udg[n - i + r] = 1;//对应的 列, 斜线 状态改变
            dfs(r + 1);//处理下一行
            cor[i] = dg[i + r] = udg[n - i + r] = 0;//恢复现场
            q[r][i] = '.';
        }
    }
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < n; j ++ )
            q[i][j] = '.';
    dfs(0);
    return 0;
}

相关文章:

  • 算法基础——栈
  • 银河麒麟桌面版包管理器(二)
  • mysql学习-B+树相关问题
  • leetcode 108 将有序数组转换为二叉搜索树
  • HQChart使用教程46-K线图如何对接第3方数据42-DRAWTEXT_LINE数据结构
  • 20届智能车赛规则
  • python环境出现出现 pip: command not found 错误
  • 什么是张量计算
  • 动态规划:从暴力递归到多维优化的算法进化论(C++实现)
  • C++ 关系运算符重载和算术运算符重载的例子,运算符重载必须以operator开头
  • 【golang学习之旅】使用VScode安装配置Go开发环境
  • Linux文件系统知识
  • (undone) MIT6.824 Lecture 01 - Introduction
  • 【极速版 -- 大模型入门到进阶】快速了解大型语言模型
  • Modern C++面试题及参考答案
  • Smith3.0 4.0的阻抗匹配操作方法
  • Apache Doris学习
  • 让 MGR 不从 Primary 的节点克隆数据?
  • 字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)
  • NLP高频面试题(十一)——RLHF的流程有哪些
  • 政企共同发力:多地密集部署外贸企业抢抓90天政策窗口期
  • 经常口干口渴的人,要当心这些病
  • 订婚不等于性同意!山西订婚强奸案入选最高法案例
  • 文化润疆|为新疆青少年提供科普大餐,“小小博物家(喀什版)”启动
  • 从这些电影与影像,看到包容开放的上海
  • IPO周报|本周A股暂无新股网上申购,年内最低价股周二上市