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 OptedLangford {
private int p;
private int n;
private int[] perm;
private int[] pos;
private int found = 0;
public static void main(String[] args) {
OptedLangford l = new OptedLangford( 16 );
l.count();
}
public OptedLangford(int p) {
this.p = p;
n = p*2;
perm = new int[p*2];
for( int i=0; i<perm.length; i++ ) {
perm[i] = 0;
}
pos = new int[p];
for( int i=0; i<p; i++ ) {
pos[i] = 0;
}
}
private void count() {
int k = p;
int i = 0;
while( k > 0 ) {
while( (i+k+1) < n && !(perm[i] == 0 && perm[i+k+1] == 0) ) {
i++;
}
if( i+k+1 == n ) {
k++;
if( k <= p ) i = remove(k)+1; else break;
} else {
perm[i] = k;
perm[i+k+1] = k;
pos[k-1] = i;
k--;
i=0;
if( k==0 ) {
if( p % 2 == 1 ) {
if( pos[p-1] >= (p-1)/2 ) break;
} else {
if( (pos[p-1] > (p/2)-1) || ((pos[p-1] == (p/2)-1) && (pos[p-2] >= p/2)) ) break;
}
found++;
remove(1);
remove(2);
i = remove(3)+1;
k = 3;
}
}
}
System.out.println(found);
}
@param
@return
private int remove(int k) {
int i = pos[k-1];
perm[i] = 0;
perm[i+k+1] = 0;
return i;
}
}