九號球推盤探討(Billiard 9-Ball Puzzle)
此為 Joshua Frankel 發明的益智玩具。
把玩了一下此盤的變化,其實就是10個球,任選一顆在中央,共有10種情況。
其它的9顆在外面繞成一圈,等於9顆球環狀排列,共有 8!= 40320種情況。
兩者相乘得 403200種變化。
將此盤視為中間一顆,然後外圍9顆的話,就會明朗許多。
外圍整圈轉動是視為一樣的,因此下面兩種情況視為相同。
(都是白球在中間,然後外圈順時針是123456789)
移動球的方式只有一種,就是把外圍的球推到中間,不管是哪個方向推,結果都會一樣,如上面的情況,把4號球推到中間,不管從右上推,或是左上推,或是下面推,結果都會一樣:
因此轉法只有一種,不分左右,就是把外面的9顆中的某顆球,推到中間就是了,不用管是從哪個方向推入的。
例如:
依序推入3號球、2號球、6號球到中間,就會變成
狀態。
一開始先盡量解,最後解不動時,再用下列「單對調」公式即可:
假設原本為「」狀態,只要依序將「139213920」推到中心即可解決。
一般狀態的時候,若要交換相鄰兩球的話,例如下圖狀態:
若要交換3號與8號球的話,先看好相對位置的號碼,如下圖:
依照「ABCDABCDE」的位置號碼,此例是「864386432」號球,依序推入中心即可達成3, 8號球相鄰交換的效果。
光用此公式,就可以把此「9號球推盤」轉出來了。
若覺得完全靠相鄰兩個交換太慢的話,下面還有隔一球交換、兩球交換、三球交換、四球交換的公式僅供參考,方法都不唯一,表中有列出所有的交換方式。
公式使用時,請自行轉換成自己對應的數字。
Original State | Algorithm(建議轉法) | Alterntive Alg.(其他轉法) |
![]() |
139213920 |
825830530, 659065190, |
![]() |
230542540 |
762986130, 746210870, |
![]() |
6106410 |
6213690, 7342750, |
![]() |
4150410 |
4528630 |
把推一顆球到中心,計算為1步的話,外圈旋轉不計,
若固定要轉成順時針依序是123456789的話,只要 10 步即能解出所有狀態,以下是用電腦跑出的結果:
最佳解步數 |
有幾種情況 |
0 |
1 |
1 |
9 |
2 |
63 |
3 |
414 |
4 |
2511 |
5 |
14013 |
6 |
63792 |
7 |
162945 |
8 |
135230 |
9 |
24219 |
10 |
3 |
總共 |
403200 |
其中,須要10步的只有三種情況,分別是順時針「987654321, 0」、「135792468, 0」、「162738495, 0」,都是蠻規則的pattern。
若順逆時針排列都當作解出來的話,只要9步即可,以下是用電腦跑出的結果:
最佳解步數 |
有幾種情況 |
0 |
2 |
1 |
18 |
2 |
126 |
3 |
828 |
4 |
5022 |
5 |
26280 |
6 |
100692 |
7 |
169200 |
8 |
95758 |
9 |
5274 |
總共 |
403200 |
感謝我們系,陳秉君同學,跟我討論一整晚,並寫程式跑出上表。
下面是把程式改成Javescript的方式呈現,請輸入您的九號球推盤「外圈的數字」,中心球不用輸入,程式會自己判斷,程式會跑出某個最佳解給你。
有的情況會跑比較久(依電腦速度而定),正常不會超過1分鐘,請耐心等待。