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

2018-06-14 11:52 更新


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

1      2      3 

4      5      6

7      8      0

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

1     2      3

4     5     6

8     7     0

這樣是復(fù)原不了的



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

第一種解決辦法:

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

反序數(shù)

但是親測(cè)后發(fā)現(xiàn)只用反敘數(shù)判斷還是沒(méi)能成功,因?yàn)槠磮D游戲只能通過(guò)“0”位(空白位置)和其相鄰的位置進(jìn)行互換。

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


以上面的矩陣為例子,

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

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

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

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


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


第二種解決辦法:

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




參考文檔:

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

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

不可還原的拼圖

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

計(jì)算拼圖的步數(shù)





以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)