首页 > 搜索 > 算法计算24点,关于24点算法(一) | 陈雪飞的博客

算法计算24点,关于24点算法(一) | 陈雪飞的博客

互联网 2020-10-27 03:20:45
在线算命,八字测算命理

24点游戏算是一个比较经典的算法了,基本只能靠穷举法算出所有可能性,然后进行判断,我的基本思路如下:指定的输入序列是一个multi无序数组,包含需要计算的数字,输出是一个四则运算表达式,仔细研究这个表达式,其实这个表达式就是一个树状实现,比如一个最简单的3*(6+(6/3))和一个(3+6)*(3+6)所形成的树状形式:

表达式树状实现

上图形成的树状形式有以下几个特点:

形成的树状形式是一棵完全二叉树叶子节点始终是待求取的数字个数操作符节点个数(n-1),叶节点个数(n)

这样就将括号问题转化为树的子节点问题,解决加法和乘法的等同性就转化为了加法节点左右两棵子树交换顺序也同为一个表达式,整个求取表达式的问题就转化成了在一个数字集合中,可以组合出多少种满足上述条件的树,综合一下,问题就变成了:

对一个个数为N的数字集合中取C(N,2),组合出一个节点,然后放入原集合(此时原集合个数变成N-1),然后再从现集合中重复上述步骤,直到集合中的节点数变为1,即为最终结果,当出现最终结果的时候,该节点即是一棵表达式树的根节点。

直接上代码:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267#include #include #include #include #include //基本操作符枚举enum class Operator {NONE,ADD,DEC,MUL,SUB};//重载输出基本操作符运算符std::ostream & operator
免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多