Perfect mazes (exactly one solution path) by recursive backtracker or randomized Prim's — different algorithms give different textures. Difficulty via size, algorithm, and a minimum solution-path length that is enforced, not hoped for. Solutions derive from the same maze data.
Maze settings
Regenerates until the solution is at least this long; fails loudly if it can't.