數(shù)字華容道怎樣才能有解

數(shù)字華容道凰慈,是在4x4的格子中汞幢,依次從左到右,從上到下放置1-15這15個數(shù)字微谓。經(jīng)過一定的隨機森篷,必須將這15個數(shù)字復(fù)原。每個數(shù)字只能向相鄰的唯一空格移動豺型。難度更高的,格子和數(shù)字會更多姻氨,比如5x5。

我在開發(fā)一個類數(shù)字華容道游戲時前联,發(fā)現(xiàn)自己3x3的格子似嗤,居然怎么都解不出來届宠。比如:一排1、2顽馋、3幌羞,二排4属桦、5他爸、6,三排8系谐,7。經(jīng)過網(wǎng)上查詢鄙煤,才知道完全隨機位置的數(shù)值華容道僅有50%的概率是有解的梯刚。而我就是用的完全隨機方式去打亂次序薪寓。

網(wǎng)上有兩篇文章說的很好,以下是根據(jù)這兩篇文章的總結(jié)锥腻。

數(shù)字華容道必然有解的前提

首先母谎,要弄清楚一個概念:逆序數(shù)。逆序數(shù)供璧,即一個數(shù)字序列冻记,將其中所有數(shù)字依次兩兩對比,若大數(shù)在前演顾,小數(shù)在后钠至,那么這就是一對逆序數(shù)胎源。這里說到的逆序數(shù),指的是數(shù)字序列中逆序數(shù)的數(shù)量宪卿。比如:上文提到的1万栅、2、3休溶、4、5芭碍、6禾进、8、7艇拍,逆序數(shù)只有1個卸夕,即8和7婆瓜。

另外,還有一點要提出來个初。一般來講猴蹂,復(fù)原狀態(tài)(初始狀態(tài))的數(shù)字華容道,會有一個空格珍逸,一般會設(shè)置在最末行的右下角聋溜。但也可以根據(jù)實際的需求,設(shè)置在其他行漱病。請留意把曼,初始空格所在的行數(shù),是決定是否有解的一個重要因素。

數(shù)字華容道型雳,必然有解,只存在于如下3個細分情形:

  1. 若格子列數(shù)為奇數(shù)沿量,則逆序數(shù)必須為偶數(shù)冤荆;
  2. 若格子列數(shù)為偶數(shù),且逆序數(shù)為偶數(shù)乌妒,則當前空格所在行數(shù)與初始空格所在行數(shù)的差為偶數(shù)撤蚊;
  3. 若格子列數(shù)為偶數(shù)损话,且逆序數(shù)為奇數(shù),則當前空格所在行數(shù)與初始空格所在行數(shù)的差為奇數(shù)光涂。

實際的推演涉及到我一時難以徹底理解的數(shù)學推算,我只能用淺顯的方式來理解這個問題忘闻。

為什么屎篱?

首先,有解的前提在于:當前空格回到初始空格所在行數(shù)時重虑,逆序數(shù)一定得是偶數(shù)秦士!為什么,我不清楚提针。

要想把空格移動到初始空格所在行曹傀,必須進行若干次上下移動和若干次左右移動。

左右移動皆愉,不會改變逆序數(shù);上下移動久锥,若格子列數(shù)為奇數(shù),則每次增減偶數(shù)個逆序數(shù)絮重,若格子列數(shù)為偶數(shù)青伤,則每次增減奇數(shù)個逆序數(shù)。

也就是說:

  1. 格子列數(shù)為奇數(shù)潮模,怎么移動痴施,都不會改變原始的逆序數(shù)。因為奇數(shù)加減偶數(shù)還是奇數(shù)动遭,偶數(shù)加減偶數(shù)還是偶數(shù)神得。所以,只要保證逆序數(shù)是偶數(shù)即可宵蕉,不必關(guān)心空格的位置羡玛。
  2. 格子列數(shù)為偶數(shù)宗苍,那么進行奇數(shù)次上下移動,會改變其逆序數(shù)的奇偶性讳窟。所以,如果當前逆序數(shù)是偶數(shù)谋右,要想有解倚评,就要保證實際上下移動會進行偶數(shù)次,也就是說空格所在行與初始空格所在行的差為偶數(shù)天梧。
  3. 同理霞丧,若當前逆序數(shù)是奇數(shù)蛹尝,要想有解,要進行奇數(shù)次的移動挫酿,才能保證最終逆序數(shù)是偶數(shù)早龟。

如何轉(zhuǎn)換逆序數(shù)奇偶性

具體實現(xiàn)應(yīng)該很簡單,不多說了葱弟,就說一點猜丹。如果想更改一個數(shù)字序列的逆序數(shù)的奇偶性射窒,只需要調(diào)換一對逆序數(shù)的位置即可。

最后

可能是CS106A課程上的一句話脉顿,并不是原文:

程序員要在不理解內(nèi)在實現(xiàn)邏輯的情況下,也能順暢地使用別人的成果祥楣。

不理解沒關(guān)系汉柒,會用就行。

參考文檔:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘀略,一起剝皮案震驚了整個濱河市恤溶,隨后出現(xiàn)的幾起案子咒程,更是在濱河造成了極大的恐慌帐姻,老刑警劉巖奶段,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痹籍,死亡現(xiàn)場離奇詭異,居然都是意外死亡棺克,警方通過查閱死者的電腦和手機吼砂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門因俐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來周偎,“玉大人,你說我怎么就攤上這事澳眷◎劝” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長助琐。 經(jīng)常有香客問我兵钮,道長舌界,這世上最難降的妖魔是什么呻拌? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任睦焕,我火速辦了婚禮复亏,結(jié)果婚禮上缭嫡,老公的妹妹穿的比我還像新娘。我一直安慰自己耕突,他們只是感情好评架,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布纵诞。 她就那樣靜靜地躺著,像睡著了一般登刺。 火紅的嫁衣襯著肌膚如雪纸俭。 梳的紋絲不亂的頭發(fā)上南窗,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天窒悔,我揣著相機與錄音壕翩,去河邊找鬼放妈。 笑死荐操,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的珍策。 我是一名探鬼主播托启,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼攘宙!你這毒婦竟也來了屯耸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蹭劈,失蹤者是張志新(化名)和其女友劉穎疗绣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺韧,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡多矮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哈打。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塔逃。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖湾盗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匀借,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站均蜜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏充择。R本人自食惡果不足惜宰僧,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一造成、第九天 我趴在偏房一處隱蔽的房頂上張望谜疤。 院中可真熱鬧仔沿,春花似錦封锉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽此疹。三九已至湖笨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辫呻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像乔外,于是被迫代替她去往敵國和親聂渊。 傳聞我的和親對象是個殘疾皇子歹撒,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容