二
二百五
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
类似于经典的八皇后问题
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