八皇后——启发函数

本文探讨了在解决八皇后问题中如何利用启发式搜索来优化计算效率。启发函数用于评估皇后移动后形成的攻击对数量,以指导皇后向冲突更少的位置移动。通过计算h值,可以确保在横向、竖向、正斜向和反斜向避免皇后间的相互攻击,遵循国际象棋的规则。并提供了一个使用Matlab实现的程序示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在八皇后的问题中,通过启发式搜索能够大大减小计算时间,启发式搜索则需要计算启发函数。下图是启发函数计算出来的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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值