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 Langford {
private int n;
private int[] perm;
private int[] idx;
private int found = 0;
private int p;
private int[] db;
@param
public static void main(String[] args) {
Langford l = new Langford( 11 );
l.generate();
}
private Langford(int p) {
this.p = p;
n = p*2;
perm = new int[p*2];
for( int i=0; i<perm.length; i++ ) {
perm[i] = 0;
}
idx = new int[p];
db = new int[p];
for( int i=0; i<p; i++ ) {
db[i] = 0;
}
}
private void generate() {
int i = 0;
while( i >= 0 && i <= n )
{
if( stillGood( i ) )
{
if( i == n ) {
found++;
i--;
} else
if( perm[i] < p ) {
if( perm[i] != 0 ) db[ perm[i]-1 ]--;
do {
perm[i]++;
if( perm[i] > p ) break;
} while( db[perm[i]-1] == 2 );
if( perm[i] > p ) {
perm[i] = 0;
i--;
} else {
db[ perm[i]-1 ]++;
i++;
}
} else {
db[ perm[i]-1 ]--;
perm[i] = 0;
i--;
}
} else {
i--;
}
}
System.out.println(found/2);
}
private boolean stillGood(int b) {
boolean cool = true;
for( int i=0; i<p; i++ ) {
idx[i] = -1;
}
for(int i=0; i<b; 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;
}
}
}
return cool;
}
}