Author: Gerd Isenberg
Date: 13:56:47 03/30/04
Go up one level in this thread
// oups, not so easy out of the class context // two routines i played with some time ago: // probably not so good to test the compiler ;-) typedef unsigned __int64 BitBoard; bool isDeBruijnN(const BitBoard &magic, int n) { bool isdbjn[64*64]; int bitpos; unsigned int deBruijn; for (bitpos = 0; bitpos < 64*64; bitpos++) isdbjn[bitpos] = false; for (bitpos = 0; bitpos < 64; bitpos++) { deBruijn = (unsigned int) ((magic << bitpos) >> (64-n)); if ( isdbjn[deBruijn] ) return false; isdbjn[deBruijn] = true; } return true; } // and a recursive one static unsigned int nodeCount = 0; static unsigned int foundCount = 0; void genDeBruijn(BitBoard sequence, int bitpos) { static BitBoard uniqueCheck = 0; nodeCount++; unsigned int uniqueIdx = (unsigned int) (sequence>>bitpos) & 63; BitBoard uniqueBit = (BitBoard)1 << uniqueIdx; if ( (uniqueCheck & uniqueBit) == 0 && uniqueIdx != 32 ) { if ( bitpos == 0 ) { foundCount++; // notify(sequence); } else { uniqueCheck |= uniqueBit; if ( bitpos == 1 ) { genDeBruijn(sequence|1, 0); } else { bitpos--; genDeBruijn(sequence|((BitBoard)1<<bitpos), bitpos); genDeBruijn(sequence, bitpos); } uniqueCheck &= ~uniqueBit; } } }
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.