2008-09-20 10 views
1

저는 dev-cpp와 wxwidgets를 사용하여 퍼즐을 푸는 프로그램을 만들었습니다.
사용자가 작업 블록과 결과 블록을 채워야하며 프로그램이이를 해결합니다.
내가 bruteforce를 사용하여이를 해결하면, 재귀 알고리즘을 사용하여 반복되지 않는 9 개의 길이 조합을 모두 생성합니다. 꽤 빠릅니다.
여기까지 모두 훌륭합니다!
그러나 문제는 내 프로그램이 블록의 문자에 따라 작동 할 때입니다. +, -, *, 등등에 대한 chars 비교 때문에 매우 느립니다 (대답을 얻지 못합니다).
운영자를 다이나믹하게 생성 할 수있는 프로그래밍 언어가 있습니까? 그래서 연산자 ROW1COL2를 +로 정의하고 다른 모든 연산과 같은 방법으로 정의 할 수 있습니다.
나는 앱의 스크린 샷을 남기므로 퍼즐이 어떻게 작동하는지 쉽게 이해할 수 있습니다.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD는 다음 알고리즘 일, 난 사소한 퍼즐을 tryed 및 제 그것을 해결.동적으로 생성 된 연산자

답변

1

정말로 이것이 당신이 찾고있는 것이 확실하지 않지만 ..
C++ 또는 C#과 같은 객체 지향 언어를 사용하면 "연산자"기본 클래스를 만든 다음이 기본 클래스에서 파생시킬 수 있습니다. "PlusOperator"또는 "MinusOperator"등. 이것은 그러한 case 문을 피하는 표준 방법입니다.

그러나 성능 문제가 해결 될지 확신하지 못합니다.
이러한 문제에 대해 일반 무차별 대입을 사용하면 지수가 높아집니다. 이것은 작은 입력에 대해 빠르게 작동하는 것처럼 보일 것입니다 - 모든 숫자를 완료한다고 말하십시오. 그러나 작업을 완료하기를 원한다면 훨씬 더 큰 문제가 있습니다.
그래서 CASE 없이도 프로그램에서 문제를 해결할 수는 없습니다.

이런 종류의 문제를 해결하기위한 올바른 방법은 일부 지능형 기능을 사용하는 고급 검색 방법을 사용하는 것입니다. 예를 들어 A* (A-star) algorithm을 참조하십시오.

행운을 빈다.

0

숫자와 연산자를 객체로 나타낼 수 있으므로 해석 시작 부분에서 구문 분석이 한 번만 수행됩니다.

관련 문제