All the code and my description of the data structures used are at github here:
The JS is the newest version with fewer logical errors in the code. But the PERL version is still good code and functional.
Run it here: https://www.emogic.com/cgi/crosswords/
There I have posted, with the author’s permission, a thesis (“Design and Implementation of Crossword Compilation Programs Using Serial Approaches” CCP 1997) from Sik Cambon Jensen. It was an invaluable tool and resource for many of the ideas that I used in my program.