1

我使用 dev-cpp 和 wxwidgets 创建了一个程序,它解决了一个难题。

用户必须填写操作块和结果块,程序将解决它。我正在使用蛮力解决它,我使用递归算法生成所有非重复的 9 长度数字组合。它做得非常快。

到这里为止一切都很棒!

但问题是当我的程序根据块上的字符运行时。由于与 +、-、* 等的字符比较,它非常慢(它永远不会得到答案)。我正在做一个 CASE。

是否有某种方式或某种编程语言允许动态创建运算符?所以我可以将运算符 ROW1COL2 定义为 +,并且与所有其他操作相同。

我留下了应用程序的屏幕截图,以便更容易理解拼图的工作原理。

http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png

PD:算法有效,我用一个简单的谜题试了一下,一秒钟就解决了。

4

2 回答 2

1

不确定这是否真的是您要寻找的,但是..
任何面向对象的语言(例如 C++ 或 C#)都允许您创建“Operator”基类,然后从该基类派生“PlusOperator”或“MinusOperator” “ ETC'。这是避免此类案例陈述的标准方法。

但是我不确定这会解决您的性能问题。
对此类问题使用简单的蛮力将导致您获得指数解决方案。对于少量输入,这似乎工作得很快——比如完成所有数字。但是,如果您想完成操作,这是一个更大的问题,有更多的可能性。
因此,即使没有 CASE,您的程序也可能无法解决它。

尝试解决此类问题的正确方法是使用一些使用启发式函数的高级搜索方法。例如,参见A*(A 星)算法

祝你好运!

于 2008-09-20T19:58:20.457 回答
0

您可以将数字和运算符表示为对象,因此解析只在求解开始时进行一次。

于 2008-09-20T19:58:39.410 回答