今天在嘗試用matlab解決n皇后問題,但是輸出的棋盤結果始終不對,看了半天也看不出問題出在哪兒,求助各位大神幫忙解答一下,感謝!
代碼如下
輸入為queen(zeros(m),m,1)
m是棋盤大小,layer是控制行數的
function queen(map,m,layer)
if sum(sum(map))==m%recursion結束條件
disp(map);
%計數還不會寫
return
end
for i = 1:m%在每一行的每個位置嘗試放皇后
if layer ==1%第一行不需要判斷是否可以放
map(layer,i)=1;
queen(map,m,layer+1);
elseif layer>1
%判斷i位置是否可以放
%判斷該列是否已經有皇后
temp1=0;
for row = 1:i
if map(row,i)==1
temp1=temp1+1;
end
end
%判斷左上斜對角有沒有皇后
temp2=0;
k1=layer-1;
if i >1
for left = i-1:1
if k1>=1 && map(k1,left)==1
temp2=temp2+1;
elseif k1<1
break
end
k1=k1-1;
end
end
%判斷右上斜對角
temp3=0;
k2=layer-1;
if i<m
for right = i+1:m
if k2<1
break
elseif k2>=1 && map(k2,right)==1
temp3=temp3+1;
end
k2=k2-1;
end
end
%如果可以放,就迭代
if temp1==0 && temp2==0 && temp3==0
map(layer,i)=1;
queen(map,m,layer+1);%到下一行開始放皇后
map(layer,i)=0;
end
end
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/36710.html
標籤:其他開發語言
