五子棋的算法用哪种比较简单

来源:百度知道 编辑:UC知道 时间:2024/05/21 14:12:38

可以采用这样的笨算法,运行起来慢点,但是很简单易懂,而且效果很好。如果能够加以优化,则其实是很好的算法:

1、首先遍历整个棋盘,找到一个可以落子的点,然后假设自己在该点落子,再然后判断如果棋子落到这个点上后会对自己有什么利益,比如会不会形成冲4活三、双活三等等,(事先将冲四活三、双活三等效果定义上利益值,当然,如果是五个子连起来了的话,利益值要被定义成最高,最好是无穷大的),将各种效果的利益值相加,得到己方的利益值。
2、将角色互换一下,重复第一步,得到对方的利益值(其实是递桂算法)。
3、将己方的利益值减去对方的利益值,得到该点的总利益值。
4、整个棋盘所有能落子的点都计算出利益值之后,找出利益值最大的那个点,将棋子落到该点。

当然,这个算法可以有很大程度的优化,比如,如果没有相邻的棋子,可以放弃该点。还有一旦找出可以胜利的点,就不再继续往下计算。。。。

模拟算法:
int liyi(角色, 层次)
{
if(层次=0)
return 0;

for(第一个可以落子的点 到 最后一个可以落子的点)
{
int 利益,最大利益;

//递桂...
利益 = 获取本角色利益值() - liyi(角色=相反角色,层次-1);

if(利益>最大利益)
{
最大利益 = 利益;
保存该点。
}
落子到所保存的点。
}

使用4级遍历算法,如果能使用棋谱库,会大幅度提升效率。

什么算法啊?

应该是赢法吧?