我使用dev-cpp和wxwidgets创建了一个解决难题的程序
用户必须填写操作块和结果块,程序将解决它
我使用bruteforce解决它,我使用递归算法生成所有非重复的9长度数组合。它做得非常快。
到目前为止一切都很棒!
但问题是我的程序根据块上的字符进行操作。它极其缓慢(它永远不会得到答案),因为chars与+, - ,*等的比较。我正在做一个案例。
是否有某种方式或某种编程语言允许运营商进行动态创建?所以我可以将运算符ROW1COL2定义为+,并且与所有其他运算相同
我留下了应用程序的屏幕截图,因此更容易理解拼图的工作原理
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png
PD:算法有效,我尝试了一个简单的谜题,并在一秒钟内解决了。
答案 0 :(得分:1)
不确定这是你真正想要的东西,但是...... 任何面向对象的语言(如C ++或C#)都允许您创建“运算符”基类,然后从此基类派生“PlusOperator”或“MinusOperator”等。这是避免此类案例陈述的标准方法。
但我不确定这会解决您的性能问题 使用普通蛮力来解决这个问题将导致您采用指数解决方案。这对于小输入似乎很快 - 比如完成所有数字。但是如果你想完成这些操作,那么它就会有更大的问题 所以很可能即使没有CASE你的程序也无法解决它。
尝试解决此类问题的正确方法是使用一些使用某些启发式功能的高级搜索方法。例如,请参阅A* (A-star) algorithm。
祝你好运!答案 1 :(得分:0)
您可以将数字和运算符表示为对象,因此解析只在解决之初进行一次。