Lua程式設計一書中的8皇后示例 解析

2021-10-06 17:41:06 字數 1070 閱讀 2967

因為八皇后要求是每行每列只能放乙個,所以示例中按每列座標用一維陣列表示

例子:  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多頁。看得很仔細,也思考了很多,所以在讀的過程中,我發現了一些小的錯誤或疑問,在此...