Frage

Ich habe ein Programm mit dev-cpp und wxwidgets, die ein Rätsel löst.
Der Benutzer muss die Operationen Blöcke und die Ergebnisse Blöcke füllen, und das Programm wird es lösen.
Im es mit Brute-Force-Lösung, i erzeugen alle nicht wiederholt 9 Länge Zahlenkombinationen einen rekursiven Algorithmus. Es tut es ziemlich schnell.
Bis hierher ist alles super!
Aber das Problem ist, wenn mein Programm arbeitet auf den Blöcken den Charakter abhängig. Seine extrem langsam (es wird nie die Antwort), wegen der Zeichen comparation gegen +, -., *, Usw. Im ein CASE tun
Gibt es eine Möglichkeit oder eine Programmiersprache weicht erlaubt dinamic Schaffung Betreiber? So kann ich den Bediener ROW1COL2 definieren, um alle anderen Operationen a +, und die gleiche Art und Weise zu sein.
Ich lasse einen Screenshot der App, so ist es einfacher zu verstehen, wie das Puzzle funktioniert.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png

PD. Der Algorithmus arbeitet, ich habe versucht es mit einem trivialen Puzzle, und löste es in einem zweiten

War es hilfreich?

Lösung

Nicht sicher, dass dies wirklich das, was Sie suchen, aber ..
Jede objektorientierte Sprache wie C ++ oder C # ermöglicht es Ihnen, eine „Operator“ Basisklasse zu erstellen und dann von dieser Basisklasse eines „PlusOperator“ oder „MinusOperator“ etc‘abzuleiten. dies ist der normale Weg, solchen Fall Aussagen zu vermeiden.

Allerdings bin ich nicht sicher, ob dies Ihr Leistungsproblem lösen.
Mit Klar Brute-Force für ein solches Problem werden Sie in einer exponentiellen Lösung führen. dies scheint schnell für kleinen Eingang zu arbeiten - sagt alle Zahlen abgeschlossen. Aber wenn Sie die Operationen sein ein viel größeres Problem mit viel mehr Möglichkeiten zu vervollständigen.
So ist es wahrscheinlich, dass auch ohne den Fall, dass Ihr Programm nicht, es lösen gehen zu können.

Der richtige Weg, um zu versuchen, diese Art von Problemen zu lösen, ist einige erweiterte Suche Methoden, die eine Heuristik-Funktion verwenden. Siehe A * (A-Stern-Algorithmus) zum Beispiel.

Viel Glück!

Andere Tipps

Sie können die Zahlen und Operatoren als Objekte darstellen, so die Analyse nur einmal am Anfang der Lösung durchgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top