递归——全排列

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 3     

void swap(int arr[],int p,int q)
{
    int tmp=arr[p];
    arr[p]=arr[q];
    arr[q]=tmp; 
}

void perm(int arr[],int p,int q){
    if(q==p) {                  //递归截止条件,输出 
        for(int i=0;i<N;i++)
        {
            printf("%d ",arr[i]);
        }
        printf("\n");
    } else
    {
        for(int i=p;i<=q;i++)           //每次循环的意思是依次将遍历的每个元素排在数组的第一个 
        {
            swap(arr,i,p);              //交换arr[i]和arr[p]的值 
            sort(arr+p+1,arr+N);        //对arr[p+1]到arr[q]递增排序 
            perm(arr,p+1,q);
            sort(arr+p,arr+N);          //对arr[p]到arr[q]递增排序 
        }
    }
}

int main(void)
{
    int arr[3]={1,2,3};
    sort(arr,arr+N);        //初始递增排序 
    perm(arr,0,N-1);
    return 0;
}

算法笔记上的:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
#define maxn 11 
int P[maxn];
bool hashTable[maxn]={false};

void generateP(int index)
{
    if(index==n+1)
    {
        for(int i=1;i<=n;i++)
        {
            printf("%d ",P[i]);
        }
        printf("\n");
    }
    else
    {
        for(int x=1;x<=n;x++)
        {
            if(hashTable[x]==false)
            {
                P[index]=x;
                hashTable[x]=true;
                generateP(index+1);
                hashTable[x]=false;
            }
        }
    }
} 
int main(void)
{
    n=4;
    generateP(1);
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容