For all you FCS veterans out there, which is the faster way to find a solution to a hand:
Method 1: (What I'm doing) The program evaluates the solution one move at a time until it finds a legal move, then attempts to make another move. When no legal move can be made, the program steps back and continues searching for another legal move to make. This is VERY time consuming, but minimally taxing on the memory.
Method 2: The program evaluates ALL possible "branches" of the tree of moves at once. It starts with one set of all possible moves on the table: table-table, table-freecell, freecell-table, table-home, freecell-home. If a move is not legal or not possible, that "branch" is pruned away. After all illegal moves are purged, all remaining branches extend second branches for ALL possible moves. Illegal moves are pruned away again. Repeat this until one branch provides a solution. This is extremely memory-intensive, but does it provide any quicker results?
Second off-topic question: Is it a good idea to restrict a solver from moving a freecell card to an empty column? My program solved MS#1012 in 44 moves (~600 move checks, 25 seconds) without being able to move anything from freecells to empty columns. When I disabled that rule, the program couldn't solve 1012 in a reasonable time. Weird...
Received on Sun Nov 23 2003 - 23:14:13 IST