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

递归实现排列型枚举

先画出递归树:

第一次写的错误代码:

#include<iostream>
#include<vector>
using namespace std;

int n;
vector<int>res;
bool st[10];

void Print()
{
    for(auto& e:res)
    {
        printf("%d ",e);
    }
    puts("");
}

void dfs(int num)
{
    if(num==n+1)
    {
        Print();
        return;
    }
    
    for(int i=1;i<=n;i++)
    {
        if(!st[i])
        {
            res.push_back(i);
            st[i]=true;
            dfs(i+1);
            res.pop_back();
            st[i]=false;
        }        
    }
}

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

结果并不是全排列,因为从递归树中可以看出,得到结果的是最后一行节点,这些节点的结尾的值并不是都是n+1

#include<iostream>
#include<vector>
using namespace std;

int n;
vector<int>res;
bool st[10];

void Print()
{
    for(auto& e:res)
    {
        printf("%d ",e);
    }
    puts("");
}

void dfs(int num)
{
    if(num==n+1)
    {
        Print();
        return;
    }
    
    for(int i=1;i<=n;i++)
    {
        if(!st[i])
        {
            res.push_back(i);
            st[i]=true;
            dfs(i+1);
            res.pop_back();
            st[i]=false;
        }        
    }
}

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


http://www.kler.cn/a/153916.html

相关文章:

  • redisson分布式锁
  • 2015年五一杯数学建模B题空气污染问题研究解题全过程文档及程序
  • 基于JavaWeb+SSM+Vue校园综合服务小程序系统的设计和实现
  • C语言每日一题(43)旋转链表
  • FWFT-FIFO的同步和异步verilog代码
  • Swoole的多进程模块
  • 22、DS1302实时时钟
  • YOLOv8 第Y7周 水果识别
  • NXP iMX8M Plus Qt5 双屏显示
  • 【开源】基于JAVA语言的校园电商物流云平台
  • 匿名结构体类型、结构体的自引用、结构体的内存对齐以及结构体传参
  • Git多库多账号本地SSH连接配置方法
  • LINUX 嵌入式C编程--信号编程
  • IDEA在左下角显示当前代码所属的类名/方法名
  • vue---消息订阅与发布(pubsub)
  • 网络通信原理,进制转化总结
  • SQL Server数据库部署
  • 九、FreeRTOS之FreeRTOS列表和列表项
  • 基于ASP.NET MVC技术的图书管理系统的设计与实现
  • Discuz论坛自动采集发布软件