算法笔记——一张A4纸让你看懂递归全排列

唉,这个问题我想了一天半,一直没想通,哈啊哈哈哈。

今天动手画了画图,把程序走了一遍,才搞出来,但对于递归还是不太理解,这个算法,最好画一遍图,自己走一遍。要不然真的容易绕进去。本人是一个菜鸡,之前参加学校的ACM纳新赛惨遭淘汰,现在自学算法,唉,给自己加加油,说不定我就是下一个大佬呢,人可以不强大,但一定要有梦想,梦想看起来很扯淡,不扯淡那还叫梦想???(手动滑稽~)

全排列指的是n个整数的所有排列,按从小到大的顺序输出n个整数的全排列,其中(a1,a2,…ana1,a2,…an)的顺序小于(b1,b2…bnb1,b2…bn):a1=b1,a2=b2…an=bn,ai<bia1=b1,a2=b2…an=bn,ai<bi
举个例子:(1 - 3)的从小到大的顺序全排列:
(1,2,3),(1,3,2),(2,1,3),(2,3,1)(3,1,2),(3,2,1)
从分治的角度考虑,可以划分为多个子问题,"1开头的全排列","2开头的全排列"... P[ ] 存放当前排列
hashtable[x]:当x在当前的排列P中时,hashtable[x] = true;

#include<iostream>
using namespace std;
const int Max=11;
int n,HashTable[Max]={false},P[Max];
void generateA(int index)
{
    if(index==n+1)
    {
        for(int i=1;i<=n;i++)
            cout<<P[i];
            cout<<endl;
            return;//此时程序终止,函数不再往下执行
    }
    for(int i=1;i<=n;i++)
    {
        if(HashTable[i]==false)
        {
            cout<<"hash"<<i<<endl;
            P[index]=i;
            HashTable[i]=true;
            generateA(index+1);
            HashTable[i]=false;
        }
    }
}
int main()
{
    n=3;
    generateA(1);
    return 0;
}

唉,凑合着看吧,能看懂就行,毕竟我查了一遍,CSDN上目前还没得人这么搞这个算法的图解(手动滑稽~)

在这里插入图片描述
快期末了,可能最近会更新的少一些,不说了,学习!
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无所畏惧的man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值