洛谷-P1706 全排列问题(DFS)

目录

题目链接:

思路:

代码:


题目链接:

P1706 全排列问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


思路:

      如果n比较小,可以写n个for循环输出全排列。但是这种简单方法只能用于较小的n,如果n比较大,这种方法的代码非常冗长、难看。
  DFS非常适合实现全排列,代码清晰、简洁、优美。下面的C++代码能从小到大打印排列。

源自罗老师的博客:<蓝桥杯软件赛>零基础备赛20周--第12周--DFS基础(必考)-CSDN博客

可以画二叉树来帮助理解。


代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int vis[10];    // 访问标记
int a[10];      //需要做全排列的数组
int b[10];      //当前DFS得到的全排列
void dfs(int step) {if (step == n+1) {     //已经对n个数做了全排列,输出全排列for (int i=1; i<=n; i++){printf("%5d",b[i]);}printf("\n");   //调试了才知道为什么这么写输出三个数字后换行,退出,然后进入下面那个遍历a[i]的for循环中return;            //结束,不再继续DFS}for (int i = 1; i <= n; i++) {    //遍历每个a[i],放进全排列中if (vis[i] == 0) {   // 数字a[i]不在前面得到的排列中b[step] = a[i];  // 把a[i]放进排列vis[i] = 1;      // 保存现场:a[i]不能在后面继续用dfs(step+1);     // 继续把后面的数放进排列vis[i] = 0;      // 恢复现场:a[i]重新可以使用}}return;
}
int main() {cin >> n;for (int i=1; i<=n; i++)  a[i]=i;   //赋值得到n个数dfs(1);  //对a[1]~a[n]做全排列return 0;
}

 输出部分排列

  上述代码是打印n个数的全排列,如果需要打印n个数中任意m个数的排列,略作修改即可。例如n=4,m=3,修改C++代码这两处:第8行把step=n+1改为step=m+1,第9行i<=n改为i<=m。

 源自罗老师的博客:<蓝桥杯软件赛>零基础备赛20周--第12周--DFS基础(必考)-CSDN博客


多调试,了解计算机走的每一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588802.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue依赖注入,详细解析

Prop 逐级透传问题​ 通常情况下&#xff0c;当我们需要从父组件向子组件传递数据时&#xff0c;会使用 props。想象一下这样的结构&#xff1a;有一些多层级嵌套的组件&#xff0c;形成了一颗巨大的组件树&#xff0c;而某个深层的子组件需要一个较远的祖先组件中的部分数据。…

C++心决之内联函数+auto关键字+指针空值

目录 7.内联函数 7.1 概念 7.2 特性 8. auto关键字(C11) 8.1 类型别名思考 8.2 auto简介 8.3 auto的使用细则 8.4 auto不能推导的场景 9. 基于范围的for循环(C11) 9.1 范围for的语法 9.2 范围for的使用条件 10. 指针空值nullptr(C11) 10.1 C98中的指针空值 7.内联…

水质监测站:守护水源,筑牢水质安全屏障

TH-LSZ06水质监测站&#xff0c;作为现代水质监测技术的创新成果&#xff0c;以其高效、便捷的特点&#xff0c;在水源保护、环境监测等领域发挥着越来越重要的作用。它不仅能够实时监测水质变化&#xff0c;提供准确的数据支持&#xff0c;还能为水质安全管理提供科学依据&…

深入理解Java内存模型及其作用

目录 1.前言 2.为什么要有 Java 内存模型&#xff1f; 2.1 一致性问题 2.2 重排序问题 3.Java 内存模型的定义 4.规范内容 4.1 主内存和工作内存交互规范 4.2 什么是 happens-before 原则&#xff1f; 1.前言 当问到 Java 内存模型的时候&#xff0c;一定要注意&#…

idea编译一直失败处理

切换分支的时候&#xff0c;明明代码正常&#xff0c;但是编译的时候一直失败。。。。特别是多个项目的时候&#xff0c;经常失败。 配置 -Djps.track.ap.dependenciesfalse idea默认是增量编译&#xff0c;设置这个false之后就从头开始编译了。 设置之后&#xff0c;点击编译&…

基于springboot的实习生管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

蓝桥杯每日不知道多少题之昂贵的聘礼

制作不易望点赞收藏加关注~~~&#xff0c;以便不时之需 题目连接&#xff1a;903. 昂贵的聘礼 - AcWing题库 解题思路&#xff1a;虚拟一个物品0&#xff0c;然后反向建边&#xff0c;边权为物品0到物品i所花费的价格&#xff0c;以及物品i换物品j所省下的钱&#xff0c;然后…

超机购ERP管理系统都有哪些功能模块?

在经济下行周期&#xff0c;众多手机店家正逐步向高效化和智能化迈进&#xff0c;手机行业作为数码产品的重要分支&#xff0c;正迎来前所未有的变革机遇。咱们超机购ERP系统&#xff0c;凭借对市场的敏锐洞察与技术创新&#xff0c;推出了超机系列工具&#xff0c;旨在引领手机…

docker容器技术篇:Docker API配置与常用操作

docker容器技术篇&#xff1a;Docker API配置与使用 一、API具体是什么&#xff1f; 百科解释应用程序接口&#xff08;API&#xff09;&#xff0c;又称为应用编程接口&#xff0c;就是软件系统不同组成部分衔接的约定&#xff0c;蒙了吧&#xff01;&#xff01;&#xff0…

杭州威雅学校:2024届90%毕业生获得世界排名前50大学录取

杭州威雅2024届90%毕业生 获世界排名前50大学录取&#xff01; 春光作序&#xff0c;万物和鸣。在四序岁始的春季&#xff0c;杭州威雅学校迎来了2024届毕业生如春雨般沁润人心的Offer&#xff01; 截至3月21日&#xff0c;杭州威雅学校2024届毕业生共收获54份offer&#xf…

一站式指南:Flutter应用如何顺利登陆苹果App Store

引言 &#x1f680; Flutter作为一种跨平台的移动应用程序开发框架&#xff0c;为开发者提供了便利&#xff0c;使他们能够通过单一的代码库构建出高性能、高保真度的应用程序&#xff0c;同时支持Android和iOS两个平台。然而&#xff0c;完成Flutter应用程序的开发只是第一步…

得物面试:10wqps高并发,如何防止重复下单?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 10wqps高并发&#xff0c;如何防止重复提交/支付订单&…