jinjiebang 2016-05-12 01:26 采纳率: 100%
浏览 1653
已采纳

求助大神五子棋alphabeta的迭代加深算法(出现异常)

int AI::AlphaBeta(int depth, int alpha, int beta) {
int val;
total++;
// 对方最后一子连五
if (CheckWin())
return -10000;
// 叶节点
if (depth == 0)
return evaluate();
int count = GetMove(depth);
// 遍历所有走法
for (int i = 1; i <= count; i++) {
MakeMove(s[depth][i].p);
val = -AlphaBeta(depth - 1, -beta, -alpha);
DelMove();
if (val >= beta) {
ABcut++;
return val;
}
if (val > alpha) {
alpha = val;
}
return alpha;
}
}
struct xy AI::gobang() {
int i;
clock_t start, finish;
start = clock();
cout << "电脑思考中......\n";
total = 0;
ABcut = 0;
srand(time(NULL));
// 第一步下中心点
if (step == 0) {
BestMove.x = size / 2;
BestMove.y = size / 2;
return BestMove;
}
// 第二,三步随机
if (step == 2 || step == 1) {
int rx, ry;
do {
rx = rand() % 5 + chessxy[1].x - 2;
ry = rand() % 5 + chessxy[1].y - 2;
} while (chessboard[rx][ry] != 0);
BestMove.x = rx;
BestMove.y = ry;
return BestMove;
}
// 迭代加深搜索
for (int i= 2; i <= SearchDepth; i += 2) {
int depth=i;
int val;
int alpha=-10001;
int beta=10000;
total++;
int count = GetMove(depth);
// 遍历所有走法
for (int j = 1; j<= count; j++) {
MakeMove(s[depth][j].p);
val = -AlphaBeta(depth - 1, -beta, -alpha);
DelMove();
if (val >= beta) {
BestVal = val;
BestMove = s[depth][j].p;
ABcut++;
break;
}
if (val > alpha) {
BestVal=alpha = val;
BestMove = s[depth][j].p;
}
}
if (BestVal == 10000)
break;
}
finish = clock();
ThinkTime = (double)(finish - start) / CLOCKS_PER_SEC;
return BestMove;
}

  • 写回答

3条回答

  • 小灸舞 2016-05-12 04:43
    关注

    崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

    代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
    提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
    单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记