这里就学习下‘全排列’的翻译法:full permutation... &&
算法:
求n个数的全排列,因为每个排列长度为n,所以对某个元素可放置位子有n个(n个数-->1个数),所以(利用回溯)可以这样搞这个问题:
从第一个元素开始,分别把它搞到当前及它后面的位置。(其实算法和代码一样很简单XD)
&& 代码:
#include<iostream>
#include<algorithm>
using namespace std;
int n = 4, a[11]; //单排列长度,排列数组
int cnt = 0; //方案数
void permutation(int cur){
if(cur >= n){
cout<<"number "<<++cnt<<":\t";
for(int i=0; i<n; i++) cout<<a[i]<<(i==n-1 ? '\n' : ' ');
}
for(int i=cur; i<n; i++){
swap(a[i], a[cur]); //枚举当前元素可以放的各个位置
permutation(cur+1); //处理完当前元素后考虑子问题,
swap(a[i], a[cur]); //换回来,因为还要拿当前元素放到i+1,i+2...位置,传说的回溯
}
}
int main(){
for(int i=0; i<10; i++) a[i]=i+1;
permutation(0);
return 0;
}