首页 > 其他分享 >2022-11-20 Acwing每日一题

2022-11-20 Acwing每日一题

时间:2022-11-20 22:23:39浏览次数:69  
标签:11 输出 20 数字 int 2022 path include Acwing

本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的。同时也希望文章能够让你有所收获,与君共勉!

排列数字

给定一个整数 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和BFS,这里我们要用DFS求解。
用一个树来表示搜索过程,对于每一位我们遍历每一个数字在这一位,用path[i]来存储,表示第i位,path[i]表示第i位上的数字,在当前状态下我们继续搜索下一位该放什么,并且我们还要定义一个数字哈希st[i]表示这一位我们是否用过,如果用过我们就选择下一个数字,直到所有数字都用过时,就说明已经形成了一个组合数,并把它输出,需要注意的是当我们搜索完后一定要进行状态回溯,不然这一颗树的状态就会到另一棵树上

代码实现

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
int path[N];
bool st[N];
int n;

void dfs(int u){
    if(u == n){		// 当所有数字都被用过后说明就形成了一个组合数
        for(int i=0; i < n ; ++i)   cout << path[i]<< ' ';  // 输出每一行
        puts("");
        return ;
    }
    for(int i=1;i <= n  ;++i){ 
    // 因为要搜索所有的数字,所以要将所有的数字都放进去且在同一情况下不放已经标记过的数字
        if(!st[i]){
            path[u] = i;    // 第u位上的数字是i
            st[i] = true;
            dfs(u+1);       // 所以标记完后再给上一层选择时要进行恢复现场,回溯
            st[i] = false;  // 现场回溯
        }
    }
}

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

标签:11,输出,20,数字,int,2022,path,include,Acwing
From: https://www.cnblogs.com/WangChe/p/16909802.html

相关文章

  • Nginx11月自学
    有一个php服务在80端口想同时支持两种协议,可以开一个443ssl反代到80。代理是为了将更多的服务整合到一起呀,解决了端口号的占用问题。负载均衡upstream中的server可以......
  • 单细胞分析:marker鉴定(11)
    导读前面我们已经确定了我们想要的簇,我们可以继续进行标记识别,这将使我们能够验证某些簇的身份并帮助推测任何未知簇的身份。1.学习目标学会确定单个簇的marker学会......
  • NET7+c#11 2022.11.8日发布,新功能介绍
    c#11新功能原始字符串泛型特性net7新功能:use+add+required速率限制中间件:令牌桶固定窗口:2/s并发限制器用户限流的限制器:爬虫.NETMinimalAPI:没有控制器没有filte......
  • 11.20.5
    #include<stdio.h>#include<math.h>intmain(){ unsignedlonglongn,sum=0; inti; scanf("%llu",&n); for(i=1;;i++) {sum+=pow(i,3); if(sum>n)break; } pri......
  • 11基础元器件-电源转换器件
    一、电源转换的用途1、用于转换电压值,将高电压转换为低电压或者将低电压转换为高电压。2、用于稳压,使得输出的电压值稳定,适合于单片机或者板的其它地方使用。3、用于隔离......
  • 2022.11.20
    T2:首先看出,答案肯定与\(X\)有关,所以肯定有一层循环用来枚举\(X\)然后考虑每个州对答案的贡献,只会是某个兵种的范围所以需要求出当前\(X\)下,某个兵种的范围,下面以......
  • 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述
    目标检测20年综述(2019)......
  • 11.21
    看了DecentralizedFederatedLearningforElectronicHealthRecords这篇论文,我看有港科大就看了,主要是应用,没有啥数学推理。应用场景:医疗数据联邦学习,医疗数据高度......
  • 11.20.3
    #include<stdio.h>intmain(){ intn,i,j,a[100][100],sum=0; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]);  for(i=0;i<n;i++) f......
  • python3-基础篇-11-文件操作
    python中多file的操作:1使用open()方法用于打开一个文件,并返回文件对象(打开文件,得到文件句柄并赋值给一个变量)2.通过文件对象对文件进行一系列操作(通过句柄对文件进行操作)3......