C++ QT中国象棋项目讲解(六) 人机对战N步搜索
生活随笔
收集整理的這篇文章主要介紹了
C++ QT中国象棋项目讲解(六) 人机对战N步搜索
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
加入搜索層數(shù),取局面的最小值,最大值構(gòu)成遞歸?,這里回溯的作用就體現(xiàn)出來
Step* SingleGame::getBestMove() {QVector<Step *> steps;//看看有哪些步驟可以走getAllPossibleMove(steps);int maxScore=-100000;Step* ret;for(QVector<Step*>::iterator it=steps.begin();it!=steps.end();++it){Step* step=*it;//試著走一下fakeMove(step);int score=getMinScore(_level-1);unfakeMove(step);if(score>maxScore){maxScore=score;ret=step;}}return ret; }求最小值
int SingleGame::getMinScore(int level) {if(level==0) return calcScore();QVector<Step*> steps;getAllPossibleMove(steps);int minScore=100000;for(QVector<Step*>::iterator it=steps.begin();it!=steps.end();++it){Step* step=*it;fakeMove(step);int score=getMaxScore(level-1);unfakeMove(step);if(score<minScore){minScore=score;}}return minScore; }求最大值
int SingleGame::getMaxScore(int level) {if(level==0) return calcScore();QVector<Step*> steps;getAllPossibleMove(steps);int maxScore=-100000;for(QVector<Step*>::iterator it=steps.begin();it!=steps.end();++it){Step* step=*it;fakeMove(step);int score=getMinScore(level-1);unfakeMove(step);if(score>maxScore){maxScore=score;}}return maxScore; }?
總結(jié)
以上是生活随笔為你收集整理的C++ QT中国象棋项目讲解(六) 人机对战N步搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机考研数学考数学几,2018考研数学
- 下一篇: 算法导论书本第3版_中文版和英文版_完整