在八皇后的问题中,通过启发式搜索能够大大减小计算时间,启发式搜索则需要计算启发函数。下图是启发函数计算出来的h值,皇后Q按照向h值小的方向移动,移动后重行计算h值。
启发函数的定义:
h(i,j)的意思是,将i这一列的Q移动到第j行,其它皇后固定不动,然后计算两两之间能够形成攻击对的皇后。
形成攻击对的条件:在横向、竖向、正斜向、反斜向存在两个或两个以上的皇后。(具体规则可参阅国际象棋的规则)
Matlab程序
%8 queen
%记录此时Q的位置
clc
clear
%以上图的Q为例,则输入为[4,3,2,5,4,3,2,3]
ChessBoard=input('please input the position of the queen:\n');
DynamicBoard=ChessBoard; %动态板
CombatGroup={
}; %用cell存储不规则数组
h=zeros(8,8); %h启发函数
for i=1:8 %cloum
for j=1:8 %row
DynamicBoard(i)=j;
for k=1:8
CombatGroup{
k}=combat(DynamicBoard,k,DynamicBoard(k));
end