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

DFS--

数字的全排列

#include <bits/stdc++.h>
using namespace std;

//最大的排列数目
const int N=10;
int n;
//存储排列的路径
int path[N];
//标记数字是否已经被使用
bool st[N];

void dfs(int u){
    //到达递归边界,输出一个排列
    if(u==n){
        //输出循环
        for(int i=0; i<n; i++){
            cout<<path[i];
        }
        //不写return会继续往下走
        return;
    }
    //生成排列的主循环
    //遍历每个可能的数
    for(int i=1; i<=n; i++){
        //如果当前数字i没有被使用过
        if(!st[i]){
            //选择这个数放在当前位置u
            path[u]=i;
            //标记这个数已使用
            st[i]=true;
            //递归处理下一个位置
            dfs(u+1);
            //取消标记(回溯)
            st[i]=false;
        }
    }
}

int main(){
    cin>>n;
    dfs(0);
    return 0;
}

语句的执行顺序分析
在这里插入图片描述
两点说明:
①u 的回退是由递归栈的结构自动处理的,不需要显式地进行 u-- 操作。
②等递归函数执行完后(也就是 return 了),程序才会执行st[i]=false;

相关文章:

  • 防止黑客篡改数据,Java整合SHA-256算法数字摘要的应用
  • 编译好的sentry SDK以及sentry-cli上传pdb文件
  • 走进底层 - JVM工作原理入门指南
  • 大模型备案语料安全要求解析
  • 2025.04.09【Sankey】| 生信数据流可视化精讲
  • LeetcodeBST2JAVA
  • 卡牌收集者1.0
  • JMH 基准测试实战:Java 性能对比的正确打开方式!
  • sqlite3基本语句
  • BUUCTF-web刷题篇(17)
  • Three.js 入门实战:安装、基础概念与第一个场景⭐
  • go语言应该如何学习
  • SQL:JOIN 完全指南:从基础到实战应用
  • EFA-YOLO:一种高效轻量的火焰检测模型解析
  • 【期中准备】电路基础(西电)
  • MySQL事务管理
  • 3 版本控制:GitLab、Jenkins 工作流及分支开发模式实践
  • Kubernetes 深入浅出系列 | 容器剖析之容器安全
  • 链路聚合+vrrp
  • 写给新人的深度学习扫盲贴:ReLu和梯度
  • 丰润区建设局网站/app开发成本预算表
  • 网站建设遇到哪些攻击/直通车推广技巧
  • 如何做盗版小说网站/网站设计论文
  • 成都哪家做网站做的好/百度云官方网站
  • 周口网站制作公司哪家好/怎么被百度收录
  • 京东怎么做轮播图链接网站/排超最新积分榜