破解"八皇后問題"

2021-02-23 笑看數學

"八皇后問題",是一個古老而著名的問題,裡面的"皇后"指的是西洋棋裡面的一種棋子,可以橫著豎著斜著走(所以比中國象棋的車威力更大)。該問題是棋手馬克斯·貝瑟爾於1848年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法?雖然是來源自西洋棋,但是卻可以抽象為一個純數學問題,所以有不少數學家都曾涉足鑽研:其中包括大名鼎鼎的數學王子高斯!據說高斯認為有76種方案,如果屬實,那麼該問題真是讓老司機都折腰了(正確答案應該是92)

如果這個問題擺在我們面前,該怎麼辦呢?

都9102年了,當然首選計算機了啊.

那麼計算機怎麼來呢?

暴力破解嗎?

每個可能的組合暴力輪一遍,

然後篩選出合格的就行了,

總條件數:

64*63*62*61*60*59*58*57約為178.46萬億

看著計算機也夠嗆啊~

然後有同學說只要組合就行了,不用排列?

ok,good idea!

那麼64*63*62*61*60*59*58*57/(8*7*6*5*4*3*2*1)

=44.26億,貌似也可以勉強暴力破解了,

不過計算機怎麼地也得跑個大半天吧,

還能不能更快點呢?

面對這個問題,很自然的還有另一種思路:

分支查找法.

先擺好第一個皇后,然後把相應的行列斜線都標記一下,

然後在剩下位置中隨機挑選一個位置放第二個皇后,

然後再把相應的行列斜線都標記一下,

然後放第三個...

....

到了第八個還有位置可以放,就得到了一個ok的組合

否則就返回上一個結點走另一條路

...

所有都走完之後,所有的解都出來了.

這個問題可以避免很多無意義的組合,

看似還是可以的.

但是,複雜啊!!!

如果只是為了求個解,有必要弄那麼複雜嗎?

還有更簡單的方案嗎?

更簡單的方案還是有的!

這樣就得深入分析這個八皇后問題了.

仔細一想不難發現,同一行肯定不能有兩個,

那麼行號的集合肯定是不多不少的{1,2,3,4,5,6,7,8}

同一列也不能有兩個皇后,

所以列號也xxx的{1,2,3,4,5,6,7,8}

既然都是1~8那麼巧,

那就可以跨出一大步:

固定行號為順序的1,2,3,4,5,6,7,8

只考慮列號的變化為j1,j2,j3,j4.j5,j6,j7,j8

(其中j1~j8是1~8的一個排列)

這樣總的變化數只是列號的排列數,

顯然是8!=4萬320

才4w多點啊,

這麼點玩意對於計算機來說算個毛線啊有木有,

再怎麼垃圾的計算機都可以秒出啊是不是呢,

所以這個問題考慮到這就變得非常簡單了:

暴力遍歷8!+過濾有效組合

就這麼簡單罷了

所以得分兩步走:第一步"暴力遍歷8!"

先想想怎麼暴力遍歷8!吧,

理論上是個找所有字典序的問題,

雖說不怎麼複雜吧,

也沒那麼簡單,

還是得繞一會的,

但是鑑於問題規模這麼小,

還繞個毛線呢,

除了暴力組合我們還可以隨機抽樣啊!

瘋狂隨機,把符合的留下來就行.

雖然隨機一次不一定碰到樣本,

那我隨機10次,100次總可以了吧,

雖然概率上隨機1億億億次都有可能不能完全抽樣,

但這種概率小的幾乎可以無視了,

這樣問題就大大化簡了,

好了,就這麼幹吧

那第二個問題,如何判斷一個組合是否是ok的?

也就是說給了8個坐標,如何判斷是否滿足要求呢?

其實行列已經保證不重合了,

只用管斜線就行了.

雖然這個問題很簡單,

大不了數一數每條斜線就知道了,

也沒幾個計算量,

但是能優化還是多少優化一下吧.

我的方案是:

(先看圖吧:粉色都屬於紅色方塊的斜線範圍,藍色方塊不屬於)

同在一個斜線的兩個方塊,坐標記為(x1,y1),(x2,y2)

不難得到|x1-x2|=|y1-y2|

一想到這個,這個問題也化簡不少了呢

整個問題解決起來就更輕鬆了

下面就直接上代碼了:

主幹流程部分:

判斷一個組合是否ok的部分:

代碼跑的很快的,即使使用不求效率的python腳本語言編寫的程序,

也要不了幾秒鐘就出結果了.

所有結果一共92種,

分別如下(列號):

15863724

16837425

17468253

17582463

24683175

25713864

25741863

26174835

26831475

27368514

27581463

28613574

31758246

35281746

35286471

35714286

35841726

36258174

36271485

36275184

36418572

36428571

36814752

36815724

36824175

37285146

37286415

38471625

41582736

41586372

42586137

42736815

42736851

42751863

42857136

42861357

46152837

46827135

46831752

47185263

47382516

47526138

47531682

48136275

48157263

48531726

51468273

51842736

51863724

52468317

52473861

52617483

52814736

53168247

53172864

53847162

57138642

57142863

57248136

57263148

57263184

57413862

58413627

58417263

61528374

62713584

62714853

63175824

63184275

63185247

63571428

63581427

63724815

63728514

63741825

64158273

64285713

64713528

64718253

68241753

71386425

72418536

72631485

73168524

73825164

74258136

74286135

75316824

82417536

82531746

83162574

84136275

當然細心點還可以發現,

這個程序對於N皇后問題也是可以的,

我試了幾個,結論還是對的.

對於更多的N,wiki上也有解的個數的結論,

而且暫時還沒有已知的通項公式,

虛位以待大神破解呢..

往期:

不想求行列式! 還能簡單判斷行列式值是否為0?

球面兩點,咋走最短?

求不出原函數還怎麼求定積分啊?分析一個特例:sinx的n次方的積分,0到2分之π

斐波那契數學通項最簡單求法,保證學過數列的人都能看懂

僅在一點可導的函數,可能存在嗎?

歡迎關注公眾號:

相關焦點

  • 寄語"拳走低架"的朋友,"功夫"與"膝蓋"能兩全乎?
    但是大約是2002年我和大師有一次碰面,我曾諮詢大師關於"膝蓋疼痛"的問題,大師的回答中有這麼一句話:"我們四個人膝蓋都不好"。注意那時還沒有人攻擊陳拳大師的膝蓋問題。我當時對上邊那句話的理解是:"要想有功夫,"膝蓋疼"的代價應該是免不了的吧!
  • "立身中正"與"胸腰摺疊"
    一一"結構勁"基礎:"骨力"訓練之五(胸錐運動)胸錐七節,是身軀靈活的部位,卻也是最能體現"立身中正"的部位。雖然"立身中正"的涵意遠不止"豎直胸錐"那麼簡單,但對初學者來講,"立身中正"先要體現在胸錐的豎直,使胸背前後均衡。這樣比較容易建立中軸,有了中軸則左右運轉靈活。且有"立木頂千斤"之效。可以參看一些老拳師的照片,能夠始終保持"立身中正"的拳架給人以極度舒適的感覺。
  • 太極拳 "腰"與"胯"的關係有必要捋捋清楚
    楊吳太極拳強調"腰為主宰",而陳式太極拳認為"胯"為人體最大的關節群,非常強調旋胯、轉胯、調胯的作用,趙堡太極拳甚至強調"以胯代手"。初學者往常的疑問是: 我該用腰?還是用胯?用了腰,胯不也在動嗎?用了胯,腰不也在轉嗎,二者皆動的狀況下,我是做對了?還是做錯了呢?
  • "襠走下弧"還是"襠走後弧"?
    一一 "結構勁"基礎:"骨力"訓練之三(胯部運動) 胯部運動一向為拳家重視。一是因為胯關節為人體之最大關節,動力渾厚。其二在於腰胯組成了人體的中心部位。於"動態平衡"至關重要。 先談關於"開胯"的問題。有兩種說法:"開前胯"與"開後胯」。沒有人明確聲稱要"開前胯"但大多數人實際上做得就是打開前胯加上斂臀,尾閭拚命向前抵撐。
  • "中軸"和"斜軸"
    "立身中正"是太極拳行拳走架的基本要求。移動時"上領下垂"謂之不偏;轉動時"保有中軸"即為中正。"軸"乃圓轉之中位,但並非一定是垂直方向。事實上人體運動時有兩個重要的軸:一為"中軸",一為"斜軸"。" 中軸"或稱"豎軸"由"百匯穴"至"會陰穴",垂直上下,是人體的衝脈的位置。
  • "骨力"和"結構勁"的不同
    武術界開口多談「勁",而鄙視」力",更推崇整體結構勁,即"整勁",很少有談到提升單個骨頭的力量。但"骨力"是最基本的不可或缺的攻防要素,不應被忽視。 所謂的"骨力"並不是指骨密度有多高,含鈣量多大,骨頭多麼耐衝擊,而是指在正確的操作下能使單個骨頭產生出力量來。初學者與人較勁時往往會有"使不上勁"的感覺,蓋因為不會用"骨力"的緣故。
  • 解析一下太極拳的"滲透力"與"滲透能力"
    太極拳技巧探秘之二先來解釋一下"滲透力"和"滲透能力"的不同。一滴水落在大地上,水借自重與勢能,具有"滲透力",而土地因其厚重和有隙,無條件全方位地接納了光顧的水滳,使水滴改變了存在的方式或消失於無形,我們稱其為具有"滲透能力"。人的身體是可以具備類似"滲透能力"的。
  • "骨力"與"結構勁"訓練之一:手臂分解
    "骨力"是單根骨頭的能量使用,也可以是一組細小複雜骨頭的聯動使用,比如手或腳,不太容易或沒有必要過份細分。就以一組骨頭看成單個骨頭使用。多根骨頭的組合使用其實就是"結構勁"了。結構組合有大有小,而單根骨頭必然是"結構"的基本原素,值得我們對重要和常用的骨節先行探討清楚。 大臂是整個手臂的根節部位,肱骨粗壯有力,一端通過肩關節與身軀相連,理論上可以輕鬆旋轉360度。
  • "結構勁"基礎:"骨力"訓練之二(腿部分解)
    兩腿之間當然有虛實之分,任何時候實胯託虛胯,實腿控虛腿,這是兩腿組合的問題,放在以後討論。當兩腳著地時,將足部看作為組合的一節。這時前端為腳趾,後端為腳跟。關於腳底一向有兩種說法:一種說法叫"五趾抓地",另一種說法叫"放鬆貼地",前一種說法是要抵抗轉體給腳底帶來的轉向慣性,後者卻是在談一個理想的結果。那麼如何才能在實踐中有效呢?
  • 我所認識的太極"纏絲勁"
    按陳兆奎老先生的話說:各家太極拳都有"纏絲勁",而陳式太極拳更強調"纏絲勁"。"纏絲勁"的外在表現形式和內在表現形式是不同的,前邊已有兩文探討過這個問題。在內,"纏絲勁"用以保持身體內部的流通和平衡,以著名的"背絲扣"為主要形式。近代人類DAN的標識圖出現後,很多人認為"雙螺旋梯形結構圖"更適合表達體內"纏絲勁"的運動方式,我也認為有一定的道理。
  • "蓄勁如張弓"一一談談"弓"的形成和運行條件
    再有可能涉及到的名詞就是"箭"了。"弓箭弓箭,張弓搭箭,箭射遠方"這是人們思維中的定式。其實"弓體"本身就有它的作用在。在"兩臂弓""兩腿弓"裡,"弦"是虛設的,"箭"是不需要的。先來說一個"臂弓"的形成。只有當你滿足了"腕關節"與"肩關節"之間相吸相系,動態等壓的狀況下,(建立意念之弦)這隻"臂弓"才能成立。一旦"臂弓"成立的狀態下有哪些益處呢?
  • 太極拳技巧探秘:之開篇語,談一談太極拳的"道"與"術"
    先來捋一捋"道"與術的關係。古人說「一陰一陽謂之道「,而"陰陰"和合就成了"太極"。所以說:太極,道也!「道」,可理解為真理、規律、本原;「術」是什麼呢?是方法、手段、技藝。太極拳是武術的一種,如果你認可的話,太極拳必然有其獨特的"方法、手段和技藝"。這就是說:太極拳有"道",與"術"兩個元素,二者皆有了無限的探求空間。
  • 我們擁有"自由意志"嗎?
    5、深入理解以上內容給你帶來的好處:你要清醒理智的認識到,在心理神經層面,當你遇到抑鬱、焦慮、強迫症、恐懼症等心理問題時,你是無法在短期內和憑藉自己的力量消除這些不良神經程序運行的模式(潛意識)對你造成影響的。因此第一、你要理智的去不斷反省自己。當你不斷通過反省去"意識"自己的錯誤時,你就不斷在對腦神經線路聯結進行著新的修正,即你在重新編程著你到腦神經程序。
  • 練功,為何要懂得"服食"
    先天陰陽是"清氣上升,積陽為天",這是乾卦;"濁氣下降,積陰為地",這是坤卦。先天陰陽在動蕩之中。這個動蕩是什麼,在下次課中會講到。這個是修行之中的關鍵問題。那麼這個先天陰陽也會相交,那麼乾坤相交之後,--天上也就有了陰氣,地下也就有了陽氣。此時的天地二氣已經不是純陰純陰了,而是陰中有陽,陽中有陰,這就是後天陰陽了。後天陰陽,就是水火。我們所處在天地,已經是後天陰陽了。
  • 【雲間漫談】大倉橋上說"漕運"
    說到松江古為漕糧貯運重地,自然要涉及當地賦稅的歷史問題。因為漕糧是地方糧賦的重要組成部分。松江地處江南腹地,素稱魚米之鄉。清初葉夢珠《閱世編·賦稅》開篇落筆即云:"吾鄉賦稅,甲於天下。"支撐其立論的依據是:"蘇州一府,贏於浙江全省;松屬地方,抵蘇十分之三,而賦額乃半於蘇,則是江南之賦稅,莫重於蘇、松,而松為尤甚矣。
  • 中國籍"移民"施暴無辜"白人":這個視頻火了,外國網友直呼受不了!
    一個中國籍"移民"最近在加拿大火了!它的名字叫:"大毛"圖片裡這隻熊貓名叫大毛,2013年從中國來到加拿大,居住在多倫多動物園。最近加拿大天氣寒冷,大毛有點不適應。希望這樣的視頻越來越多,我很久沒有這樣笑過了,上帝保佑它!其他網友:
  • 太極拳"腰為主宰"的內涵探秘
    太極拳技法探秘 之七"主宰"是一個很霸氣的詞彙,有統治、支配的意思。用通俗的話說,主宰者可不是一般的領導或先行者,而是統馭一方的王者,是軍隊的司令官。太極拳論裡說"腰為主宰",賦予了"腰"極其重要的地位。到底"腰"的功能何在,值得如此推崇,讓我們一起來探究一下。先看一下"腰"有哪些基本的功能和特質。人體運動有兩大要素:"轉"和"移"。
  • 脆脆香與"臭"蕻蕻
    甘溪很早就有自己的"馳名產品",兩種以"菜頭"為原材的醃製品。    甘溪盛產"大菜頭",但它的經濟價值並不高,又常常在短時間之內供過於求,堆積如山的"大菜頭"並沒有給種植戶帶來豐收的喜悅,反而增添了為"銷路"的憂愁。(這種說法與以前小文中提到的並不矛盾。)"繫上紅頭繩"也沒用。
  • "發勁如放箭"一一敢問箭射何方?
    太極拳技法探秘 之五每一個練拳的朋友都對"蓄勁如張弓,發勁如放箭」耳熟能詳",甚至在夢裡都親身演繹過這種功夫。那麼這句話只是打個比方呢?還是實在可操作的一種太極技法呢?進一步具體發問:我們每一個人身上,"弓"可有形,"弦"可虛張,但"箭"在哪裡?"箭"射何方?先來看一看楊澄甫的答案。"與敵對手時,內勁如開弓⋯⋯我如弓,敵如箭,出勁之速,敵如箭出矣。
  • "小倩"50歲了!王祖賢"凍齡"溫哥華慶生曬照片:雙腿修長,全身無贅肉!上億豪宅疑曝光~~
    1月31日,"永遠的小倩"凍齡女神王祖賢在50歲生日當天透過社交網絡上傳一組照片,並留言"向所有愛我的賢迷致意,謝謝你們,永遠愛你們,阿彌陀佛"這回"女神"過生日,不少粉絲主動獻上祝福,"永遠的女神生日快樂。"還有臺灣粉絲殷殷期盼女神回歸,喊著:"美女,快回家吧。