matlab解决关于人工智能的四皇后问题

(1)问题描述与算法介绍

          四皇后或者多皇后问题是研究人工智能的一个基础问题,问题具体是什么网上有很多了,就不详细说了,我这里就matlab上如何解决的参考和修改写了一些程序代码。四皇后问题的解决方案很多,本文主要采用的是回溯算法来解决的。

(2)代码详情:

function Q = Queen

global index;   %定义全局变量

n = 4;           %这个可以修改从而是多皇后问题

A=zeros(n,n);    %初始化矩阵

index = zeros(1,n);     

i=1;%行号

j=1;%列号

%-------------------------------------------

while(i>0)    

     %%-----------对于固定的某一行上看是否有符合的-------- 

     while(j<=n)

         if safeplace(i,j)    %检测是否可以放置

            A(i,j) = 1;

            index(i) = j;     %可以放置,记录位置

            break;            %同时退出本行寻找

         else

             j=j+1;      %不可以放置,到下一个位置检测

         end

     End

     %%-------------------------------

   if j<=n           %该行可以找到,到下一行

       i = i+1;     %下一行

       j=1;          %该行可以找到则在下一行上又从第一个开始检测

   else             %不可以找到,回溯回上一行

       i=i-1;      %回溯到上一行

       if i~=0      %不为0,说明还有可能,为0那么就结束了,这是程序结束的关键

           j=index(i);   %记录上一行位置

           A(i,j)=0;      %对于位置清0

           index(i)=0;    %对应标记清0

           j=j+1;          %下一列

       end

   End

     %%------------------------------------

   if (index(n)~=0)    %最后一行标记不为0,则能找到一个解

       disp(A);      %显示解的矩阵

   End

     %%--------------------------------------

end

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function p=safeplace(x,y)    %安全性检测

global index;

for a = 1:x-1

    b = index(a);

    if(x==a||y==b||x-y==a-b||x+y==a+b)  %位置不能同行同列同斜线

        p=0;

        return;

    end

end

p=1;


(3)结果显示

现在在命令窗口直接运行queen函数即可,得到结果如下:

>> queen

     0     1     0     0

     0     0     0     1

     1     0     0     0

     0     0     1     0

 

     0     0     1     0

     1     0     0     0

     0     0     0     1

     0     1     0     0

可以看到这两种情况,当然改变n的值可以运行多皇后问题了。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值