拼圖游戲打亂后不可還原解決辦法

2018-06-14 11:52 更新


自己做了一個拼圖小游戲,大概如下:

1      2      3 

4      5      6

7      8      0

0是空白位置,每次按照隨機的順序重新排列,但是不是每次排列后都可能被還原,例如:

1     2      3

4     5     6

8     7     0

這樣是復原不了的



----------------------割----------------------------

第一種解決辦法:

后來查了一些方法,其中有提到“反序數(shù)”的概念,通過兩個矩陣的反敘述奇偶是否相同,可以判斷兩個矩陣,其中一個矩陣是否可以通過相鄰位置的對象兩兩互換位置后調整成另外一個矩陣。

反序數(shù)

但是親測后發(fā)現(xiàn)只用反敘數(shù)判斷還是沒能成功,因為拼圖游戲只能通過“0”位(空白位置)和其相鄰的位置進行互換。

這里判斷還需要加上兩個矩陣空白位置所在矩陣的行列數(shù)進行判斷。


以上面的矩陣為例子,

第一個矩陣空白塊所在位置為 a[2][2]. 反序數(shù)為0

和為: sum = 2 + 2 + 0 ; sum = 4;

第二個矩陣空白塊所在位置是 a[2][2],反序數(shù)為3

和為:sum = 2 +2 + 3 = 7;


0 為偶數(shù),3為奇數(shù),所以第二個矩陣是不能轉換成第一個矩陣的,也就是如果拼圖打亂成這個順序是不能被還原的。


第二種解決辦法:

讓空白格隨機和周邊的方塊交換位置,這樣這樣走幾十步就可以了,而且一定可以復原。




參考文檔:

一群大神的舌槍唇戰(zhàn),可以參考,但是沒有什么實際性的作用;

拼圖里面,一張圖片應該以么樣的算法打亂,才能夠保證有解?

不可還原的拼圖

適合拼圖游戲的打亂算法講解

計算拼圖的步數(shù)





以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號