递归实现全排列算法 c++描述

2019 精帖
1 3637

递归实现全排列算法 c++描述

#include<iostream>
using namespace std;
//交换
void exchange(int *a,int i,int j){
    if(i==j){
        return ;
    }else{
        *(a+i)=*(a+i)+*(a+j);
        *(a+j)=*(a+i)-*(a+j);
        *(a+i)=*(a+i)-*(a+j);
    }
}
//递归函数
void re(int *a,int k,int m){ 
    if(k==m){
        for(int i=0;i<=m;i++){
            cout<<*(a+i)<<" ";
        }
        cout<<endl;
    }else{
        for(int i=k;i<=m;i++){
            exchange(a,k,i);//交换
            re(a,k+1,m);//递归
            exchange(a,i,k);//交换回来
        }
    }
}
//主函数
int main(){
    int a[]={1,2,3,4};
    re(a,0,3);
    return 1;
}


QQ截图20181129225258.png




留言(0)
加载更多
猜你喜欢
  • file 五子棋游戏源码(c#)

    <p><img src="http://www.jiajiajia.club:8089/weblog/2019_11_20/c02d2f77-2710-4f24-9cc9-619cca7ee7f8.p
  • file 五子棋游戏(c#)

    <p><img src="http://www.jiajiajia.club:8089/weblog/2019_11_19/ad8c22f6-23bd-4694-8c94-7abd0e77c402.p
  • blog -迷宫问题-广度优先搜索-队

    问题思路: 典型的广度优先搜索,根据字典序大小,可以确定遍历的循序, 因为字典序D<L<R<U, 所以对于每一个节点优先先往下走,然后向左走,然后向右走,然后向上走。则最后首先到达出口的一条路径就是符合题意的最短路径。
  • blog -快速

    百科:快速序(Quicksort)是对冒泡序的一种改进。 快速序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟序将要序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都
  • blog 数据结构--完二叉树的权值

    试题:思路: 用数组表示完二叉树,用先序遍历的方式遍历每一层的节点,用一个数组储存每一层的和,因为数据规模小于100000所以用一个容量为17的数组即可。计完每一层的和,再比较层数最小之和最大的那一层。代码:packa
  • blog 冒泡序 - 数据结构与

    思想: 每次从没有序的集合a中拿取一个最大或最小的元素,放入有序的集合b中,直到a集合中的元素被取完 : 用变量i遍历整个数组,用变量j遍历i后面的数组,每次交换i比j大的元素,使得i遍历过的数组元素有序,直至整个数组被
  • blog 二维数组的行遍历和遍历

    c++语言#include <iostream>using namespace std;int arr[4][6] = { 0 };int row = sizeof(arr) / sizeof(arr[0]);//行int col =
  • blog -数求值

    问题思路: 斐波那契数的变体 考虑如果把20190324项的每一项的值都出来的话,那么值的范围就会超出基本数据类型能够表示的范围,又考虑到题目是求最后四位数,而加时前一位不会影响后一位的计结果,例如
  • blog 希尔序 - 数据结构与

    思想: 希尔序是插入序的增强版,其主要的思想还是插入序的思想。 : 在插入序的基础上,对待序数组进行间隔为inc的分组,然后对每个分组进行直接插入序,一次序完成后,减小inc间隔,然后再进行分组,对每个分
  • blog 选择序 - 数据结构和

    思想: 对冒泡序的一种改进,每次从没有序的集合a中拿取一个最大或最小的元素,放入有序的集合b中,直到a集合中的元素被取完 : 用变量i遍历整个数组,用变量j遍历i后面的数组,每次遍历i初始k=i,每次发a[k]比a[