C++手動で全配列を実現
8818 ワード
全配列、つまり配列の組み合わせ
構想:1から始まる全配列,すなわち2,3の全配列,2,3の全配列はそれぞれ2と3から始まる全配列である.これは再帰的なプロセスです.具体的な各ステップの解析はコードの中にあります.
123 。
123 132 213 231 312 321
構想:1から始まる全配列,すなわち2,3の全配列,2,3の全配列はそれぞれ2と3から始まる全配列である.これは再帰的なプロセスです.具体的な各ステップの解析はコードの中にあります.
//
// Created by Night on 2020/7/16.
//
#include
#include
using namespace std;
int a[] = {1, 2, 3, 3};
int ans = 0;
int len = sizeof(a) / sizeof(a[0]);
/*
* , check
* K ,
*/
int check(int n, int i) { // i n......i-1
if (i > n) {
for (int j = n; j < i; ++j) {
if (a[i] == a[j])
return 0;
}
}
return 1; // 1
}
void perm(int k) {
if (k == len){ //
for (int j = 0; j <len ; ++j) {
printf("%d ",a[j]);
}
ans++;
printf("
");
}
// K K
for (int i = k; i < len; i++) {
if (check(k, i)) { //
swap(a[i], a[k]); // , 。
perm(k + 1); // k+1
swap(a[i], a[k]);// ,
}
}
}
int main() {
perm(0);
printf(" %d ",ans);
return 0;
}