1~n의 배열 생성 및 재집합 가능한 배열 생성
#include
using namespace std;
void printPermutation(int n, int* A, int cur)
{
if (cur == n) { //
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("
");
}
else {
for (int i = 1; i <= n; i++) { // A[cur] i
int ok = 1;
for (int j = 0; j < cur; j++) {
if (A[j] == i) {
ok = 0; // i A[0]~A[cur-1] ,
}
}
if (ok) {
A[cur] = i;
printPermutation(n, A, cur + 1); //
}
}
}
}
int main()
{
int A[20];
printPermutation(5, A, 0); // 1~5
return 0;
}
순환 변수 i는 현재 고찰된 A[cur]입니다.원소 i가 이미 사용되었는지 확인하기 위해 위의 프로그램은 표지 변수 ok를 사용했습니다. 초기 값은 1(진짜)이고 A[j]=i가 발견되면 0(가짜)로 바꿉니다.만약 최종 ok가 아직 1이 아니라면, i가 시퀀스에 나타나지 않았다는 것을 설명하고, 시퀀스 끝 (A [cur] = i) 에 추가한 후에 다시 호출합니다.
충분한 수조 A를 설명하고 printPermutation (n, A, 0) 을 호출하면 사전순으로 1 ~ n의 모든 배열을 출력할 수 있습니다.
만약 문제가 입력 그룹 p로 변하고 사전 순서대로 그룹 A 요소의 모든 배열을 출력한다면 코드를 수정해야 합니다.
#include
#include
#include
using namespace std;
int P[100], A[100];
// p 。 p
void printPermutation(int n, int* P, int* A, int cur) {
if (cur == n) {
for (int i = 0; i < n; i++) printf("%d ", A[i]);
printf("
");
}
else for (int i = 0; i < n; i++) {
if (!i || P[i] != P[i - 1]) {
int c1 = 0, c2 = 0;
for (int j = 0; j < cur; j++) {
if (A[j] == P[i]) {
c1++;
}
}
for (int j = 0; j < n; j++) {
if (P[i] == P[j]) {
c2++;
}
}
if (c1 < c2) {
A[cur] = P[i];
printPermutation(n, P, A, cur + 1);
}
}
}
}
int main()
{
int i, n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &P[i]);
}
sort(P, P + n);
printPermutation(n, P, A, 0);
return 0;
}
마지막으로 STL의 라이브러리 함수next_permultation
#include
#include
#include
using namespace std;
int main()
{
int n, p[10];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &p[i]);
}
sort(p, p + n); // , p
do {
for (int i = 0; i < n; i++) {
printf("%d ", p[i]); // p
}
printf("
");
} while (next_permutation(p, p + n)); //
return 0;
}
상술한 코드는 재집합 가능에도 적용된다.다음으로 전송:https://www.cnblogs.com/zhangyaoqi/p/4591533.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.