当前位置: 代码迷 >> 综合 >> 全排列(next_permutation,递归)
  详细解决方案

全排列(next_permutation,递归)

热度:15   发布时间:2023-11-08 17:28:40.0

http://www.cnblogs.com/zyoung/p/6764371.html
下面用递归算法实现对1 2 3 4 全排列:
法一:STL中的next_permutation算法。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){int n,p[10],i;cin>>n;for(i=0;i<n;i++) scanf("%d",&p[i]);sort(p,p+n);do{for(i=0;i<n;i++) printf("%d ",p[i]);printf("\n");}while(next_permutation(p,p+n));  //求下一个排列return 0;
}

法二.递归求全排列

#include <iostream>
using namespace std;template<typename T>
void permutation(T array[], int begin, int end)
{int i;if(begin == end){for(i = 0; i <= end; ++i){cout<<array[i]<<" ";}cout<<endl;return;} else {//for循环遍历该排列中第一个位置的所有可能情况for(i = begin; i <= end; ++i) {swap(array[i], array[begin]);permutation(array, begin + 1, end);swap(array[i], array[begin]);}}
}int main(int argc, char **argv)
{int a[4] = {
   1, 2, 3, 4};permutation(a, 0, sizeof(a) / sizeof(int) - 1);return 0;
}