📄 search_queen.m
字号:
function Y=search_queen(n)
%皇后算法,n必须为奇数,不然不能用该算法;(对角线约束太强了,很多时候是无解的,所以不要对角线约束)
%这样约束条件为:同一行同一列只能有一个为1;
M=zeros(n,n);M1=ones(n,n); xi=zeros(1,n);
% flag=true;
% while(flag)
for i=1:n
count=sum(M1(i,:)); %count the remaining number of places where 1 can be placed;
xi=randerr(1,count);
for index=1:count % find where 1 is (index) in this row vector(Length=count but not n);
if xi(index)==1
break;
end
end
xi=zeros(1,n); count1=0;
for l=1:n
if M1(i,l)==1
count1=count1+1;
if count1==index
xi(l)=1; break;
end
end
end
M(i,:)=xi;
index=l;
M1(i+1:n,index)=zeros(n-i,1);
% for k=i+1:n
% if index+k-i<=n & index+k-i>=1
% M1(k,index+k-i)=0;
% end
% if index-k+i<=n & index-k+i>=1
% M1(k,index-k+i)=0;
% end
%
% if (index+k-i<1 | index+k-i>n) & (index-k+i<1 | index-k+i>n)
% break;
% end
% end
end
% if count==0
% disp('sorry , not find a suitable random pi matric this time! ');
% else
% if i==n
Y=M;
% flag=false;
% disp('Congratulations! You make it!');
% end
% end
%
% end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -