全排列算法-递归

#include<algorithm>后,可以使用其中的next_permutation()函数

 

 

#include <iostream>
#include <cstring>
#include <cstdio>
#include <windows.h>
#include <algorithm>
using namespace std;
int main()
{
    int a[3];
    int len=sizeof(a)/4;
    for(int i=0;i<len;i++)
    {
       a[i]=i+1;
    }
    do{//这里用do while,先输出未用排列函数打乱之前的排列,不然会少一个
        for(int i=0;i<len;i++)
            printf("%d",a[i]);
        printf("\n");
    }while(next_permutation(a,a+len));
    system("pause");
    return 0;
}

next_permutation()函数会重修排列数组,并返回true   false

达到最后一个排列时,返回false

 

void permutation(int a[],int start,int total)
{
    if (start == total - 1)
    {
        //排列好了,进行操作
        for (int i = 0; i<total; i++)
            cout << a[i]<<" ";
        cout << endl;
        return;
    }
    int temp = 0;
    for (int i = start; i < total; i++)
    {
        //swap(*(a + start), *(a + i));
        swap(a[start], a[i]);//交换
        permutation(a, start + 1, total);
        swap(a[i], a[start]);//本次排列结束,恢复状态,等待下一个循环的交换
    }
}

 

或者用全局数组,传参数少

#include <iostream>
#include <cstring>
#include <cstdio>
#include <windows.h>
#include <algorithm>
using namespace std;
#define n 5//   更大的数,控制台可能就没法显示全了,只显示后面的一部分
void permut(int index);
int a[n]={0};
int p[n]={0};
bool harsh[n]={false};
int len=sizeof(a)/4;
int cnt=0;
int main()
{
    //int len=sizeof(a)/4;
    for(int i=0;i<n;i++)
        a[i]=i+1;
    permut(0);
    cout<<cnt;
    system("pause");
    return 0;
}

void permut(int index)
{
    if(index==len)
    {
        for(int i=0;i<len;i++)
            printf("%d",p[i]);
        printf("\n");
        cnt++;
        return;
    }
    for(int i=0;i<len;i++)
    {
        if(harsh[i]==false)
        {
            p[index]=a[i];
            harsh[i]=true;
            permut(index+1);
            harsh[i]=false;
        }else
        continue;
    }
    return;
}

原文链接: https://www.cnblogs.com/lxzbky/p/10544344.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    全排列算法-递归

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/400144

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月14日 上午9:44
下一篇 2023年4月14日 上午9:44

相关推荐