九宮格問題優化

課上老師留了個九宮格問題,今天把我的心得記錄下,希望能和諸君相互學習

九宮格問題:

正常用枚舉法會很麻煩,需要計算9!次,而且每次都要有各種判斷,及其繁瑣,下面給出我的優化及解法:

1、如圖所示,設1-9個格子所填數據爲a1至a9,設每列,每行,斜着的和爲x

則三行相加爲:3x=a1+a2+……+a9=1+2+……+9=45,所以x=15,即每一行、每一列、斜着的和均爲15;

2、第二行、第二列、兩個斜方向相加爲:4 * 15=a1+a2+……+a9+3*a5=45+3*a5,即a5=5;中間數必是5;

3、設a1=i;a2=j;a3=k;a4=l;因爲a5=5,則由涉及到a5的行列斜可計算:a6=10-l;a7=10-k;a8=10-j;a9=10-i;那麼進行判定

的時候凡是涉及a5的均可以不考慮了;

4、計算可知行a1+a2+a3與a7+a8+a9是重複的,本質上都是i+j+k=15;同理列a1+a4+a7與a3+a6+a9也是重複的,均可

化爲i+l+10-k=15;最後只要判定這兩個條件相等即可。

5、注意:每個數字不能相等,即i,j,k,l10-i,10-j,10-k,10-l均不相等且不等於5;

6、優化,現在的計算次數爲8*7*6*5,但是i<5的時候10-i爲大於5的情況,兩個是對稱的沒必要再計算,只需要算出i<5

的情況再倒過來就是兩種情況,這樣計算次數爲4*7*6*5;

7、代碼如下圖

結果是

不知道大家發現沒有,雖說是有八種,但是出去中心變換,即倒着打印的四種還只剩下四種,而有趣的是剩下四種也不是

純粹的四種,第三個是第一個行變成列,在矩陣上叫做轉置,第五個又是第一個的第三行和第一行交換,而第七個又是第

五個的轉置,所以本質上來說其實只有一種。是不是有些意思?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章