Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 2 KB
package hu.krivan.szakkor;
@author
public class BruteLangford {
private int n;
private int[] perm;
private int[] idx;
private int found = 0;
private int p;
@param
public static void main(String[] args) {
BruteLangford p = new BruteLangford( 7 );
p.generate();
}
private BruteLangford(int p) {
this.p = p;
n = p*2;
perm = new int[n];
for( int i=0, m=1; i<perm.length; i=i+2, m++ ) {
for( int a=0; a<2; a++ ) {
perm[i+a] = m;
}
}
idx = new int[p];
}
private void generate() {
int j, m, k;
while( true ) {
handle();
j = n - 2;
while( perm[j] >= perm[j+1] ) {
j--;
if( j == -1 ) break;
}
if( j == -1) break;
m = n-1;
while( perm[j] >= perm[m] ) {
m--;
if( m == -1 ) break;
}
swap( j, m );
k = j+1;
m = n-1;
while( k < m ) {
swap( k++, m-- );
}
}
System.out.println(found/2);
}
private void handle() {
boolean cool = true;
for( int i=0; i<p; i++ ) {
idx[i] = -1;
}
for(int i=0; i<n; i++) {
if( idx[ perm[i]-1 ] == -1 ) {
idx[ perm[i]-1 ] = i;
} else {
if( ( i-idx[ perm[i]-1 ]-1 ) == perm[i] ) {
} else {
cool = false;
break;
}
}
}
if( cool ) found++;
}
private void swap(int j, int m) {
int tmp = perm[j];
perm[j] = perm[m];
perm[m] = tmp;
}
}