/ Ako získať všetky možné riešenia pomocou spätného algoritmu? - c #, riešenie, sudoku, backtracking

Ako získať všetky možné riešenia pomocou spätného algoritmu? - c #, riešenie, sudoku, backtracking

Ja používam popísaný algoritmus spätného posunu v tomto videu na YouTube.

Teraz by som mal mať možnosť získať všetky možné riešenia. Môžem to urobiť pomocou spätného algoritmu a ako? Ak to nie je možné, ktorý iný (jednoduchý) algoritmus by som mal použiť?

odpovede:

9 pre odpoveď č. 1

Táto otázka nie je pre túto lokalitu vhodná, pretože sa nezdá, že sa týka skutočného kódu.

Ale za každú chvíľu to urobím.

Samozrejme môžete získať všetky možné riešenia pomocou spätného algoritmu. Pamätajte, ako funguje spätný algoritmus:

zatiaľ čo (stále sú k dispozícii hádanky) urobhádať vyriešiť hádanku s odhadom ak bolo riešenie, potom zaznamenajte riešenie a ukončite slučku. prehľadať odhad možných odhadov ak ste zaznamenali riešenie, potom je hádanka riešiteľná.

Ak chcete všetky riešenia, modifikujte algoritmus iba tak, aby:

zatiaľ čo (stále sú k dispozícii hádanky) urobhádať vyriešiť hádanku s odhadom ak bolo riešenie, potom zaznamenajte riešenie. Neopustite. prehľadať odhad možných odhadov ak ste zaznamenali akékoľvek riešenie, potom je hádanka riešiteľná.

Mimochodom, napísal som rad blogových článkov o riešení sudoku v C # pomocou algoritmu reštartovania farieb grafu; môže to byť zaujímavé pre vás:

http://blogs.msdn.com/b/ericlippert/archive/tags/graph+colouring/

V tomto kóde sa zobrazí riadok:

return solutions.FirstOrDefault();

"riešenia" obsahujú dotaz, ktorý vymenúva všetkyriešenie. Chcem iba prvé takéto riešenie, takže to je to, o čo sa ho pýtam.Ak chcete každé riešenie, jednoducho prepíšte program tak, aby nevolal FirstOrDefault, Ďalšie komentáre nájdete v poznámkach nižšie.