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

《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)问题 A: 【递归入门】全排列

题目描述

排列与组合是常用的数学方法。先给一个正整数 ( 1 < = n < = 10 ),例如n=3,所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1 

输入

输入一个整数n(1<=n<=10)

输出

输出所有全排列,每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格。

样例输入
3
样例输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

题目链接:Problem A: 【递归入门】全排列 - Codeup新家 

分析:这道题实际上是第4章入门篇(2)——算法初步第3节第2目递归下的例子,当然在第4章也是用递归生成的。实际上用stl的next_permutation()也是可以的。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define ll long long
#define INF 0x3f3f3f3f
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,a) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#a<<"="<<(a)<<endl
using namespace std;

void getans(int n,int index,int *temp,int *flag)
{
    if(index==n)
    {
        for(int i=0;i<n;++i)
            i==0?printf("%d",temp[i]):printf(" %d",temp[i]);
        printf("\n");
    }
    for(int i=1;i<=n;++i)
    {
        if(flag[i]==0)
        {
            temp[index]=i;flag[i]=1;
            getans(n,index+1,temp,flag);
            flag[i]=0;
        }
    }

    return;
}

int main(void)
{
    #ifdef test
    freopen("in.txt","r",stdin);
//    freopen("in.txt","w",stdout);
    clock_t start=clock();
    #endif //test

    int n;
    while(~scanf("%d",&n))
    {
        int ans[n+5]={0},flag[n+5]={0};
        getans(n,0,ans,flag);
    }

    #ifdef test
    clockid_t end=clock();
    double endtime=(double)(end-start)/CLOCKS_PER_SEC;
    printf("\n\n\n\n\n");
    cout<<"Total time:"<<endtime<<"s"<<endl;        //s为单位
    cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms为单位
    #endif //test
    return 0;
}

相关文章:

  • [pytest] 配置
  • 中国信通院安全所青藤云安全联合牵头:容器安全评价新标准正式发布
  • Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
  • prompt样例库推荐
  • 《领导力21法则》第一章「盖子法则」笔记
  • 自动运维部署工具实现
  • Python Flask 在网页应用程序中处理错误和异常
  • MySQL配置文件my.cnf和mysql.cnf、mysqld.cnf的区别
  • 【算法】二叉树的递归遍历
  • 【Axure资料】110套优质可视化大屏模板+图表组件+科技感元件等
  • Filebeat收集nginx日志到elasticsearch,最终在kibana做展示。
  • 绪论数据结构基本概念(刷题笔记)
  • Docker数据管理,端口映射与容器互联
  • 华为hcia——Datacom实验指南——三层交换和ARP的工作原理
  • 【愚公系列】《AI Agent技术、应用与商业》003-Al Agent 的分类方式
  • 【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统
  • 系统架构的评估的系统的质量属性
  • Go本地缓存设计与实现
  • [微服务设计]1_微服务
  • Liunx——动静态库
  • 安徽凤阳通报鼓楼瓦片脱落:2023年曾维修,已成立调查组
  • 两次通话、三点诉求,泽连斯基对美称愿与俄签署和平备忘录
  • 雷军:小米芯片采用3纳米制程,首款SUV“YU7”即将发布
  • 释新闻|拜登确诊恶性前列腺癌,预后情况如何?
  • 倒计时1天:走进“中国荔乡”茂名,探寻农交文旅商融合发展新模式
  • 水果预包装带来的环境成本谁来分担?