您的位置:首页 > 编程语言 > MATLAB

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

2014-10-10 14:38 134 查看
(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的值可以运行多皇后问题了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: