五子棋智能算法!!!!!!!!(200分)

  • 主题发起人 主题发起人 二百五
  • 开始时间 开始时间

二百五

Unregistered / Unconfirmed
GUEST, unregistred user!
具体实现算法:
类似于经典的八皇后问题
function getmax;//得到最佳位置的x,y坐标

begin

//根节点depth=depthmax;
//叶子节点depth=0;
if (depthmax-depth) mod 2=0 then

begin

value2:=-9000; //value2为临时变量
value[depth]:=-9000; //节点赋初值
end
else
begin

value2:=9000;
value[depth]:=9000;
end;
if depth=depthmax then
max:=-9999;
如果是叶子节点,进行估值,result:=估值;exit;
对于每一个合法的可下棋的位置do

begin

保存棋局;
下棋;
dec(depth);
s:=getmax; //递归调用
inc(depth);
//选择节点中最大或是最小的值
if ((deepmax-depth)mod 2=0) then

begin
if (value2<s)then
begin
value2:=s;value[depth]:=value2;
end;
end
else
begin
if (value2>s)then
begin
value2:=s;value[depth]:=value2;
end;
end;

//如果值大于根节点值则赋值
if (depth=deepmax)and(value2>max)then

begin
max:=value2;
max_x:=i;
//x坐标
max_y:=j;
//y坐标
end;

恢复棋局;
result:=value2;
end
 
什么意思?
是要算法吗?好象CSDN上有一个!
 
效率有可能不高。
递归层数有限制,否则会太慢
 
我也想知道
 
对不起,CSDN上有一个8后问题不用递归,效率好像要比用递归的高喔。
C的代码。
 
将你的算法改用堆栈实现,效率会提高很多,用递归算法上很简单但效率不够,尤其在递归层数
很多的情况下,你不想每下一步棋都要喝杯咖啡后等电脑落子吧?
 
K! 这个家伙已经把ID注销了,看来只能让版主结束了. 这种算法稍稍有些研究的人都想得出来!
to only you:
我个人认为在类似五子棋这样的搜索中,函数的递归调用本身并不是复杂度的主要所在,大部分时间应该是
花在了分析落子之后的盘面局势之上.使用递归或堆栈的速度差别不会太大.
我构思了一种搜索方案: 在每层中,仅仅将该层对上一层的改变部分进行保存,形势分析也是基于上一层的
分析结果——只要计算一个子(该层中落的子)对局势的改变就可以了.
 
哈哈
用博奕树,或a,b剪树最好了,我用c++写过一个,谁要?
 
qiubole:
我要。email: wbo@bigfoot.com
 
算法这里有
Scientific American Magazine
http://www.sciam.com
 
&amp;#2379;&amp;#2357;&amp;#2350;&amp;#2381;&amp;#2366;&amp;#2367;&amp;#2369;&amp;#2346;&amp;#2327;&amp;#2352;&amp;#2325;&amp;#2340;&amp;#2379;&amp;#2340;&amp;#2366;&amp;#2340;&amp;#2325;&amp;#2327;&amp;#2340;&amp;#2376;&amp;#2340;&amp;#2344;..&amp;#2379;&amp;#2342;&amp;#2342;&amp;#2366;..&amp;#2381;&amp;#2327;&amp;#2379;&amp;#2367;&amp;#2379;&amp;#2375;&amp;#2340;&amp;#2367;&amp;#2327;&amp;#2366;&amp;#2379;&amp;#2367;&amp;#2379;
 
to 房客:
找不到呀!请祥细点!
 
后退
顶部