全排列
思想:
这是一个全排列问题,需要使用递归实现,将数组中的所有元素和第一个元素交换,求后面n-1个元素的全排列。
按照这个条件递归下去,知道元素的个数只有一个的时候,输出所有的元素。
#include
<iostream>
using
namespace
std;
int
total = 0;
void
perm(
int
arr
[],
int
start
,
int
size
){
if
(
start
>=
size
){
for
(
int
i = 0; i <
size
; i++){
cout <<
arr
[i] <<
" "
;
}
cout << endl;
total++;
//return;
}
else
{
for
(
int
i =
start
; i <
size
; i++){
int
temp =
arr
[
start
];
arr
[
start
] =
arr
[i];
arr
[i] = temp;
perm(
arr
,
start
+ 1,
size
);
temp =
arr
[
start
];
arr
[
start
] =
arr
[i];
arr
[i] = temp;
}
}
}
int
main(){
int
a [] = { 1, 2, 3, 4, 5, 6 };
perm(a, 0, 3);
cout<< total << endl;
return
0;
}
此外在C++STL中也有一个关于全排列的函数:
next_permuntation(start, start_length);
int
a [] = { 1, 2, 3, 4, 5, 6 };
sort(a, a + 6);
while
(next_permutation(a, a + 6)){
for
(
int
i = 0; i < 6; i++){
cout << a[i] <<
" "
;
}
cout << endl;
}