1. 程式人生 > >國際象棋八皇後問題----解決辦法

國際象棋八皇後問題----解決辦法

八皇後問題 算法 代碼的藝術 代碼優化

技術分享圖片
不論你是擅長哪種語言的程序員或者是思維邏輯愛好者,遇到這個問題,首先要理解題幹。
在國際象棋裏面,皇後可以上下左右斜線吃棋,在8x8的棋盤上放八個皇後,不相互幹擾,下面說下解決思路:
1.傳統解決辦法:首先會正面思考。
先在第一行第一個格子放皇後,然後在第二行第三個格子放皇後,以此類推,遇到不滿足的情況返回到上一個皇後,重新放皇後的位置。------------當然這種方法沒有錯,就是繁瑣,編程思路就是:先放一個二維數組來表示棋盤,然後定義一個變量表示皇後,滿足條件是整數增加或者用換行表示,再定義一個字符串變量表示棋盤的落棋點,保證皇後和落棋點不沖突。
2.第二種解決辦法:比較每個皇後落棋點的是否有沖突即可。
也就是說每一個皇後在棋盤上落棋點只能落在每一行或每一列的八個點之一,然後去掉相鄰擺放位置的機會,去掉斜線(45°和135°)的位置,這樣就節省很多計算時間。-------直接用數組(三個元素或者八個元素)比對解決,比一個一個位置比較快很多。
3.第三種解決辦法:因為我們已經知道棋盤的大小和位置,那我們可以采取坐標系的解決辦法,條件判斷還是一樣,坐標用二維數組表示,但是存在四個象限,我們可以用45°,135°,225°,315°定義斜線,正負數代表行和列。
這種方法大家以後會遇到,當然定義變量會有點復雜,但是使用範圍廣。
4.第四種解決辦法:逆向思維,我們定義每個皇後落棋點,然後根據落棋點篩選可以相互攻擊的擺放點,然後用總擺放個數減去就行,這個和第一個方法類似。
它的適用範圍存在於正面不好解決的時候,有存在的價值。
5.個人總結:一個好的程序員,他寫出來的代碼必須滿足可讀性和實用性結合,程序的優化是每個程序員都必須掌握的,你把它當做藝術,那創作的源泉就會源源不斷的從你的腦海裏湧現出來,當然,你的收入也會有一個提高。

國際象棋八皇後問題----解決辦法