2008-09-20 95 views
1

我使用dev-cpp和wxwidgets創建了一個解決了難題的程序。
用戶必須填寫操作塊和結果塊,程序將解決它。
我使用bruteforce解決它,我使用遞歸算法生成所有不重複的9長度數組合。它做得非常快。
到這裏一切都很棒!
但問題是當我的程序根據塊上的字符進行操作時。它非常緩慢(它從來沒有得到答案),因爲字符與+, - ,*等比較我在做一個CASE。
是否有某種方式或一些編程語言允許創建操作符?所以我可以將運算符ROW1COL2定義爲一個+,並且與所有其他操作一樣。
我留下了應用程序的截圖,以便更容易理解這個難題的工作原理。
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD:該算法的工作,我有一個簡單的拼圖tryed它,解決它在第二。動態創建操作符

回答

1

不確定這是否真的是你要找的,但..
任何面向對象的語言,如C++或C#將允許你創建一個「運營商」的基類,然後從這個基類派生「PlusOperator」或「MinusOperator」等。這是避免此類案件陳述的標準方法。

但是我不確定這會解決您的性能問題。
對這樣的問題使用普通的蠻力會導致你處於指數級的解決方案。這對於小型輸入似乎可以快速工作 - 比如完成所有數字。但是,如果你想完成這個行動,它將會帶來更大的問題,並帶來更多的可能性。
因此,即使沒有CASE,您的程序也可能無法解決。

嘗試解決這類問題的正確方法是使用一些使用一些啓發式功能的高級搜索方法。例如,請參閱A* (A-star) algorithm

祝你好運!

0

您可以將數字和運算符表示爲對象,因此解析只能在求解開始時完成一次。