Вопрос

Я создал программу, используя dev-cpp и wxwidgets, которая решает головоломку.
Пользователь должен заполнить блоки операций и блоки результатов, а программа решит задачу.
Я решаю эту задачу, используя грубую силу, я генерирую все неповторяющиеся комбинации чисел длиной 9, используя рекурсивный алгоритм.Он делает это довольно быстро.
До этого все отлично!
Но проблема в том, что моя программа работает в зависимости от символов на блоках.Это очень медленно (он никогда не получает ответа) из-за сравнения символов с +, -, * и т. д.Я занимаюсь ДЕЛОМ.
Есть ли какой-нибудь способ или какой-нибудь язык программирования, позволяющий динамическое создание операторов?Поэтому я могу определить оператор ROW1COL2 как +, и таким же образом все остальные операции.
Я оставляю скриншот приложения, чтобы было легче понять, как работает головоломка.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


ПД:Алгоритм работает, я попробовал его с тривиальной головоломкой и решил за секунду.

Это было полезно?

Решение

Не уверен, что это действительно то, что вы ищете, но..
Любой объектно-ориентированный язык, такой как C++ или C#, позволит вам создать базовый класс «Оператор», а затем вывести из этого базового класса «PlusOperator» или «MinusOperator» и т. д.это стандартный способ избежать таких операторов случая.

Однако я не уверен, что это решит вашу проблему с производительностью.
Использование простой грубой силы для такой проблемы приведет к экспоненциальному решению.Кажется, что это работает быстро для небольшого ввода - скажем, завершения всех чисел.Но если вы хотите завершить операции, это гораздо более серьезная проблема с гораздо большим количеством возможностей.
Поэтому вполне вероятно, что даже без CASE ваша программа не сможет ее решить.

Правильный способ попытаться решить такого рода проблемы — использовать некоторые расширенные методы поиска, которые используют некоторые эвристические функции.См. Алгоритм A* (A-звезда) например.

Удачи!

Другие советы

Числа и операторы можно представлять как объекты, поэтому разбор выполняется только один раз в начале решения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top