首页 > 其他分享 >Alpha-Beta搜索很简单

Alpha-Beta搜索很简单

时间:2022-12-11 12:11:59浏览次数:59  
标签:return int back pstack Beta 搜索 ret 69 Alpha

基本搜索方法——简介(二)

代码:

/*
 d=3 a=96 b=-69 BCDE
  d=2 a=69 b=-96 FGHI
   d=1 a=96 b=-69 MLKJ
    eval=7
   -7(v) >= -69(b) ret
  7(v) >= -96(b) ret
 -7(v) >= -69(b) ret
7
*/
// https://www.xqbase.com/computer/search_intro2.htm
// https://www.xqbase.com/computer/search_intro3.htm
#include <stdio.h>
#include <vector>

struct { char* haizi; int v; } nodes[] = {
    { "BCDE" }, // A
    { "FGHI" }, // B
    { "" }, { "" },    { "" }, // CDE
    { "LMKJ" },    // F 改这里可以“排序”
    { "NO" }, // G
    { "" }, { "" }, // HI
    { "", 11 }, // J
    { "", 12 }, // K
    { "", 9 }, // L
    { "", 7 }, // M
    { "", 15 }, // N
    { "", 6 }, // O
};

std::vector<int> pstack;    // position(局面) stack

char* gen_moves() { return nodes[pstack.back()].haizi; }
void apply_move(char m) { pstack.push_back(m - 'A'); }
void undo_move() { pstack.pop_back(); }
int eval() { return nodes[pstack.back()].v; }
#define I do { for (int i = 0; i < 4 - d; i++) putchar(' '); } while (0) // Indent

int alpha_beta(int d, int a, int b) {
    if (d <= 0) { int v = eval(); I;printf("eval=%d\n", v); return v; }
    char*    moves = gen_moves();
    I;printf("d=%d a=%d b=%d %s\n", d, a, b, moves);
    for (char* p = moves; *p; p++) {
        apply_move(*p);
        int v = -alpha_beta(d - 1, -b, -a);
        undo_move();
        if (v >= b) { I;printf("%d(v) >= %d(b) ret\n", v, b); return v; }
        if (v > a) { I;printf("%d(v) > %d(a)", v, a); a = v; }
    }
    I;printf("ret %d\n", a); return a;
}

int main() {
    pstack.push_back(0);
    printf("%d\n", -alpha_beta(3, 96, -69));
    getchar(); return 0;
}
View Code

这就对了?改下节点F的子节点的顺序试试?

基本搜索方法——简介(三) 解释为什么排序这一步是很重要的。

其实本文的原标题是“Alpha-Beta搜索很简单…………吗?”,耸人听闻骗下点击。:-)

Insertion sort is used when number of elements is small. It can also be useful when input array is almost sorted, only few elements are misplaced in complete big array.

https://www.geeksforgeeks.org/c-program-for-insertion-sort/

标签:return,int,back,pstack,Beta,搜索,ret,69,Alpha
From: https://www.cnblogs.com/funwithwords/p/16973152.html

相关文章

  • 一种用于全局数值优化的适应度-距离平衡的新型随机分形搜索优化算法(Matlab代码实现)
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • LeetCode HOT 100:搜索旋转排序数组
    题目:33.搜索旋转排序数组题目描述:一个整数数组,数组每个值都不相同,且该整数数组是一个被旋转过的数组。被旋转过的数组是指,由一个递增的数组,从某一个下标开始往后的元素,......
  • 关于修剪二叉搜索树中的递归思路
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left......
  • 分布式搜索引擎03
    1.聚合的种类聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手......
  • 神经网络结构搜索-可微
    basicideasupernet训练参数确定结构选择图中的一条路径考虑latencyTradeoffACCandLatencyHardwareAwarenessSummary参考Liu,Simony......
  • 神经网络架构搜索-RNN via RNN+RL
    使用RNN搜索CNN架构参数(卷积核大小、卷积核个数)训练ControllerRNN问题:不可微?valacc不是一个关于RNN参数的可微函数,所以不能使用反向传播使用强化学习方法不得......
  • vue 搜索框高亮
    核心代码keySign(title){lets=this.text;//搜索框的值(您要标红的关键字)varstr=title;//列表标题(原文本)//去除中间空格且字符之......
  • WPF TextBox搜索框&自定义TextBox样式
    先看效果图咯:   前面的文章中,button样式告一段落。接下来分享几个TextBox样式。后续持续更新中~代码都在git上同步。有需要的可以下载查看。项目地址在之前的文......
  • 搜索结果处理
    搜索的结果可以按照用户指定的方式去处理或展示。1.排序elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keywor......
  • 搜索文章及代码(Matlab&Python代码实现)
     ......