Oto dobry do refleksji na temat:Rozwiązywanie Kakuro puzzle
http://en.wikipedia.org/wiki/Kakuro
Ja próbuje dokonać solver dla tej gry. Dokumentacja jest skończona (czytanie pliku początkowego ze zmienną liczbą kolumn i wierszy) Zakłada się, że plik wejściowy jest zgodny z regułami gry, więc gra jest zawsze możliwa do rozwiązania. Poświęć trochę czasu na przeczytanie zasad gry:
I Wcześniej pod opieką struktury danych, które myślę, że będzie pasować najlepiej:
struct aSquare { int verticalSum; int horizontalSum; int value; }
i złożył «tablicę» tych dynamicznie pracować na zrobiłem to tak, że czarne kwadraty mają wartość -1. białe kwadraty (rzeczywiste kwadraty rozwiązania) inicjalizują się w punkcie 0. Można również łatwo uzyskać położenie każdej struktury aSquare z tablicy, bez potrzeby tworzenia dla niej dodatkowych pól struktury.
Teraz algorytm ... W jaki sposób na świecie rozjemcę wszystkie te sumy i znajdę ogólny sposób, który rozwiąże wszystkie rodzaje sieci. Walczyłem z tym przez całe popołudnie bezskutecznie.
Pomoc jest doceniana, baw się dobrze!
* EDYCJA: Właśnie zdałem sobie sprawę, że opublikowany link zawiera kilka wskazówek dotyczących technik rozwiązywania. Nadal będę to sprawdzać, aby zobaczyć, co ludzie wymyślą.
Należy zauważyć, że istnieje spora przestrzeń do sprytności w kroku "[obliczyć możliwe wartości prawne dla tego pola]". – Brian
@Brian: więcej do wybrania pozycji, jak w wielu algorytmach może to oznaczać przejście od wielomianu do czasu wykładniczego. Kakoru jest NP-zupełny, ale wciąż mądrze wybierający porządek może znacznie zmniejszyć stałe. A obliczanie możliwych wartości prawnych powinno w każdym razie być stałym czasem z odpowiednimi strukturami danych. – liori
Wystarczająco fair.W rozwiązaniu zaprojektowanym przeze mnie (dla innej układanki), jedną sztuczką, której użyłem, było odebranie ** każdej ** pozycji i wypróbowanie jej w jednej iteracji, używając dowodu przez sprzeczność, aby zmniejszyć liczbę możliwych wartości prawnych. Wypełniłem również wszystkie przestrzenie, które miały tylko jedną możliwą wartość prawną. Tak więc moja łamigłówka miała de facto funkcję "[obliczyć możliwe wartości prawne dla każdego pola]". Mój selektor pozycji do odgadywania nie miał żadnej inteligencji i naprawdę go nie potrzebował. Aby być sprawiedliwym, Nurikabe jest układanką binarną, więc wszystkie pozycje są równie ograniczone. – Brian