因為八皇后要求是每行每列只能放乙個,所以示例中按每列座標用一維陣列表示
例子: 1維陣列 這相當於是
二維陣列以下座標 1,1 2,7 3,5 4,8 5,2 6,4 7,6 8,3 首先明白這個概念
n=8
function isplaceok(a,n,c)
for i=1,n-1 do
if(a[i]==c) or
(a[i] - i == c - n ) or
(a[i] + i == c + n ) then
return false
endend
return true
endfunction printsolution(a)
for i =1, n do
for j=1,n do
io.write(a[i]== j and "x" or "-"," ")
endio.write("\n")
endio.write("\n")
endfunction addqueen(a,n)
if n >n then
printsolution(a)
else
for c =1, n do
if isplaceok(a,n,c) then
a[n] = c
addqueen(a,n+1)
endend
endendaddqueen({},1)
以上**中
8皇后問題中其實最核心的判斷**是如何判斷對角線
其餘的列印,遞迴都很容易想到
最關鍵的地方isplaceok方法中的
(a[i] - i == c - n )
(a[i] + i == c + n )
為什麼這裡可以判斷對角線,因為8*8的正方形 來算 行-行=列-列
比如說1,1 和2,2 套入等式中可以得出相等的,是在對角線上
3,5 和 4,6 ,計算出來一樣的結果
思路轉變過來以後這個地方極其簡單..
其餘地方就沒難度,只是注意整理遞迴的思路
權威老了?《UNIX網路程式設計》一書中過時的地方
最近打算簡單封裝一下linux下的socket函式,使之成為乙個好用的類,參考書的藍本選用了經典的 unix網路程式設計 在書中,作者提到,使用send 函式傳送資料的時候,如果協議棧的傳送緩衝區滿了,send 函式將返回 1,並且errno為eintr,這個時候應該重新呼叫send 繼續傳送。為了...
關於《C 程式設計第4版》一書中發現的錯誤
書名 programming c 中文版 第4版 1 懷疑出錯位置 第5章 繼承與多型 112頁 呼叫基類構造方法 部分內容 懷疑內容 在示例5 1中,新的類 listbox 派生之 control 有自己的構造方法,引數為三個整數。請問 是三個整數嗎?下面是 內容 public listbox i...
關於《道法自然》一書中的「依賴倒置」問題
最近在書店裡買到你們的新書 道法自然 感覺寫得非常好,正如李維先生的評價一樣,內容豐富,匯集並組織大量的物件導向知識,並且以乙個實踐專案為主線將這些知識有機的組織,豐富而且有著內在的統一性。非常吸引人,我已經讀了100多頁。看得很仔細,也思考了很多,所以在讀的過程中,我發現了一些小的錯誤或疑問,在此...