~ubuntu-branches/ubuntu/saucy/sgt-puzzles/saucy

« back to all changes in this revision

Viewing changes to puzzles.h

  • Committer: Package Import Robot
  • Author(s): Ben Hutchings
  • Date: 2012-04-07 02:38:40 UTC
  • mfrom: (1.1.15) (3.1.16 sid)
  • Revision ID: package-import@ubuntu.com-20120407023840-1sazcea7ic2k0ano
Tags: 9411-1
* New upstream version - closes: #666709
  - Adds Pearl puzzle
* Update German translation, thanks to Helge Kreutzmann

Show diffs side-by-side

added added

removed removed

Lines of Context:
348
348
void dsf_init(int *dsf, int len);
349
349
 
350
350
/*
 
351
 * tdq.c
 
352
 */
 
353
 
 
354
/*
 
355
 * Data structure implementing a 'to-do queue', a simple
 
356
 * de-duplicating to-do list mechanism.
 
357
 *
 
358
 * Specification: a tdq is a queue which can hold integers from 0 to
 
359
 * n-1, where n was some constant specified at tdq creation time. No
 
360
 * integer may appear in the queue's current contents more than once;
 
361
 * an attempt to add an already-present integer again will do nothing,
 
362
 * so that that integer is removed from the queue at the position
 
363
 * where it was _first_ inserted. The add and remove operations take
 
364
 * constant time.
 
365
 *
 
366
 * The idea is that you might use this in applications like solvers:
 
367
 * keep a tdq listing the indices of grid squares that you currently
 
368
 * need to process in some way. Whenever you modify a square in a way
 
369
 * that will require you to re-scan its neighbours, add them to the
 
370
 * list with tdq_add; meanwhile you're constantly taking elements off
 
371
 * the list when you need another square to process. In solvers where
 
372
 * deductions are mostly localised, this should prevent repeated
 
373
 * O(N^2) loops over the whole grid looking for something to do. (But
 
374
 * if only _most_ of the deductions are localised, then you should
 
375
 * respond to an empty to-do list by re-adding everything using
 
376
 * tdq_fill, so _then_ you rescan the whole grid looking for newly
 
377
 * enabled non-local deductions. Only if you've done that and emptied
 
378
 * the list again finding nothing new to do are you actually done.)
 
379
 */
 
380
typedef struct tdq tdq;
 
381
tdq *tdq_new(int n);
 
382
void tdq_free(tdq *tdq);
 
383
void tdq_add(tdq *tdq, int k);
 
384
int tdq_remove(tdq *tdq);        /* returns -1 if nothing available */
 
385
void tdq_fill(tdq *tdq);         /* add everything to the tdq at once */
 
386
 
 
387
/*
351
388
 * laydomino.c
352
389
 */
353
390
int *domino_layout(int w, int h, random_state *rs);