이상한 위치 n의 모든 점이 위치 (n-1)의 점 앞에 나타날 수 없다는 제한하에 java의 점 집합을 바꾸려고합니다. 즉, 2 점 1과 2가 주어지면 2가 1보다 먼저 나타날 수 없습니다 순열과 주어진 점 1,2,3 & 4의에서 예상 순열의 설정은 다음과 같습니다제한이있는 점 집합을 어떻게 바꾸는가?
1,2,3,4
1,3,2,4
1,3,4,2
3,1,2,4
3,4,1,2
3,1,4,2
나는 현재 다음 찾는 순열에 대한 코드가
:
static void permute(int[] a, int k,int[] p) {
if (k == a.length) {
for (int i = 0; i < a.length; i++) {
System.out.print(" " + a[i]);
}
System.out.println();
}
else {
int temp;
for (int i = k; i < a.length; i++) {
if(i % 2 == 0){
temp = a[k];
a[k] = a[i];
a[i] = temp;
permute(a, k + 1,p);
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
else{
if(k > p[i]){
temp = a[k];
a[k] = a[i];
a[i] = temp;
permute(a, k + 1,p);
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
}
}
하지만 내 전류를 출력 :
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 3 2
1 4 2 3
3 2 1 4
3 2 4 1
3 1 2 4
3 1 4 2
3 4 1 2
3 4 2 1
어떤 도움이 정말 재귀 적 접근 방식에 대해
이러한 종류의 연습 문제는 잘 문서화되어 있으며 모두 역 추적을 적용하여 해결할 수 있습니다. 이 http://www.fas.harvard.edu/~cscie119/lectures/recursion.pdf를 살펴볼 수 있습니다. 18 페이지의 백 트랙킹 알고리즘 템플릿은 모두 동일하게 보입니다. 더 일반화 된 버전은 노드에서 데이터를 랩하여 재사용을 쉽게합니다. –
규칙을보다 정확하게 설명 할 수 있습니까? '홀수 위치 n의 모든 점들이 위치 (n-1)의 지점보다 먼저 나타날 수 없다면'홀수 위치 (3)에있는 3이 어떻게 2 이전에 나타날 수 있습니까? 왜 규칙이 '1'에만 적용되고 예를 들어 숫자가 1,2,3,4입니까? – MrSmith42
@ MrSmith42 : 그는 "even"을 의미했을 수도 있습니다. 따라서 2가 1보다 앞에 나오지 않고 4가 3보다 앞에 나타날 수 없습니다. –