91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

益智游戲克星:BFS暴力搜索算法

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:算法與數(shù)據(jù)結(jié)構(gòu) ? 2020-08-03 16:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

滑動(dòng)拼圖游戲大家應(yīng)該都玩過(guò),下圖是一個(gè) 4x4 的滑動(dòng)拼圖:

拼圖中有一個(gè)格子是空的,可以利用這個(gè)空著的格子移動(dòng)其他數(shù)字。你需要通過(guò)移動(dòng)這些數(shù)字,得到某個(gè)特定排列順序,這樣就算贏了。

我小時(shí)候還玩過(guò)一款叫做「華容道」的益智游戲,也和滑動(dòng)拼圖比較類似:

那么這種游戲怎么玩呢?我記得是有一些套路的,類似于魔方還原公式。但是我們今天不來(lái)研究讓人頭禿的技巧,這些益智游戲通通可以用暴力搜索算法解決,所以今天我們就學(xué)以致用,用 BFS 算法框架來(lái)秒殺這些游戲。

一、題目解析

LeetCode 第 773 題就是滑動(dòng)拼圖問(wèn)題,題目的意思如下:

給你一個(gè) 2x3 的滑動(dòng)拼圖,用一個(gè) 2x3 的數(shù)組board表示。拼圖中有數(shù)字 0~5 六個(gè)數(shù),其中數(shù)字 0 就表示那個(gè)空著的格子,你可以移動(dòng)其中的數(shù)字,當(dāng)board變?yōu)閇[1,2,3],[4,5,0]]時(shí),贏得游戲。

請(qǐng)你寫(xiě)一個(gè)算法,計(jì)算贏得游戲需要的最少移動(dòng)次數(shù),如果不能贏得游戲,返回 -1。

比如說(shuō)輸入的二維數(shù)組board = [[4,1,2],[5,0,3]],算法應(yīng)該返回 5:

如果輸入的是board = [[1,2,3],[4,0,5]],則算法返回 -1,因?yàn)檫@種局面下無(wú)論如何都不能贏得游戲。

二、思路分析

對(duì)于這種計(jì)算最小步數(shù)的問(wèn)題,我們就要敏感地想到 BFS 算法。

這個(gè)題目轉(zhuǎn)化成 BFS 問(wèn)題是有一些技巧的,我們面臨如下問(wèn)題:

1、一般的 BFS 算法,是從一個(gè)起點(diǎn)start開(kāi)始,向終點(diǎn)target進(jìn)行尋路,但是拼圖問(wèn)題不是在尋路,而是在不斷交換數(shù)字,這應(yīng)該怎么轉(zhuǎn)化成 BFS 算法問(wèn)題呢?

2、即便這個(gè)問(wèn)題能夠轉(zhuǎn)化成 BFS 問(wèn)題,如何處理起點(diǎn)start和終點(diǎn)target?它們都是數(shù)組哎,把數(shù)組放進(jìn)隊(duì)列,套 BFS 框架,想想就比較麻煩且低效。

首先回答第一個(gè)問(wèn)題,BFS 算法并不只是一個(gè)尋路算法,而是一種暴力搜索算法,只要涉及暴力窮舉的問(wèn)題,BFS 就可以用,而且可以最快地找到答案。

你想想計(jì)算機(jī)怎么解決問(wèn)題的?哪有那么多奇技淫巧,本質(zhì)上就是把所有可行解暴力窮舉出來(lái),然后從中找到一個(gè)最優(yōu)解罷了。

明白了這個(gè)道理,我們的問(wèn)題就轉(zhuǎn)化成了:如何窮舉出board當(dāng)前局面下可能衍生出的所有局面?這就簡(jiǎn)單了,看數(shù)字 0 的位置唄,和上下左右的數(shù)字進(jìn)行交換就行了:

這樣其實(shí)就是一個(gè) BFS 問(wèn)題,每次先找到數(shù)字 0,然后和周圍的數(shù)字進(jìn)行交換,形成新的局面加入隊(duì)列…… 當(dāng)?shù)谝淮蔚竭_(dá)target時(shí),就得到了贏得游戲的最少步數(shù)。

對(duì)于第二個(gè)問(wèn)題,我們這里的board僅僅是 2x3 的二維數(shù)組,所以可以壓縮成一個(gè)一維字符串。其中比較有技巧性的點(diǎn)在于,二維數(shù)組有「上下左右」的概念,壓縮成一維后,如何得到某一個(gè)索引上下左右的索引?

很簡(jiǎn)單,我們只要手動(dòng)寫(xiě)出來(lái)這個(gè)映射就行了:

vector>neighbor={ {1,3}, {0,4,2}, {1,5}, {0,4}, {3,1,5}, {4,2} };

這個(gè)含義就是,在一維字符串中,索引i在二維數(shù)組中的的相鄰索引為neighbor[i],:

至此,我們就把這個(gè)問(wèn)題完全轉(zhuǎn)化成標(biāo)準(zhǔn)的 BFS 問(wèn)題了,借助前文BFS 算法框架套路詳解的代碼框架,直接就可以套出解法代碼了:

intslidingPuzzle(vector>&board){ intm=2,n=3; stringstart=""; stringtarget="123450"; //將2x3的數(shù)組轉(zhuǎn)化成字符串 for(inti=0;i>neighbor={ {1,3}, {0,4,2}, {1,5}, {0,4}, {3,1,5}, {4,2} }; /*******BFS算法框架開(kāi)始*******/ queueq; unordered_setvisited; q.push(start); visited.insert(start); intstep=0; while(!q.empty()){ intsz=q.size(); for(inti=0;i

至此,這道題目就解決了,其實(shí)框架完全沒(méi)有變,套路都是一樣的,我們只是花了比較多的時(shí)間將滑動(dòng)拼圖游戲轉(zhuǎn)化成 BFS 算法。

很多益智游戲都是這樣,雖然看起來(lái)特別巧妙,但都架不住暴力窮舉,常用的算法就是回溯算法或者 BFS 算法,感興趣的話我們以后再聊。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98069
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27368

原文標(biāo)題:益智游戲克星:BFS暴力搜索算法

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    其利天下:13 萬(wàn)轉(zhuǎn)暴力風(fēng)扇,驅(qū)動(dòng)方案需要滿足哪些核心技術(shù)要求?

    暴力風(fēng)扇行業(yè),13萬(wàn)轉(zhuǎn)超高轉(zhuǎn)速產(chǎn)品,是區(qū)分入門款與高端旗艦款的核心門檻。而一款13萬(wàn)轉(zhuǎn)暴力風(fēng)扇能不能穩(wěn)定落地、實(shí)現(xiàn)大規(guī)模量產(chǎn),核心就取決于13萬(wàn)轉(zhuǎn)暴力風(fēng)扇驅(qū)動(dòng)方案的底層設(shè)計(jì)。
    的頭像 發(fā)表于 02-27 15:30 ?69次閱讀
    其利天下:13 萬(wàn)轉(zhuǎn)<b class='flag-5'>暴力</b>風(fēng)扇,驅(qū)動(dòng)方案需要滿足哪些核心技術(shù)要求?

    算法工程師需要具備哪些技能?

    算法工程師需要掌握一系列跨學(xué)科的技能,涵蓋數(shù)學(xué)基礎(chǔ)、編程能力、算法理論、工程實(shí)踐以及業(yè)務(wù)理解等多個(gè)方面。 以下是具體技能及學(xué)習(xí)建議: 線性代數(shù)核心內(nèi)容:矩陣運(yùn)算、特征值分解、向量空間等。應(yīng)用場(chǎng)
    發(fā)表于 02-27 10:53

    其利天下:方波驅(qū)動(dòng) VS FOC 驅(qū)動(dòng),暴力風(fēng)扇到底該選哪種驅(qū)動(dòng)方案?

    暴力風(fēng)扇產(chǎn)品研發(fā)的廠家,幾乎都會(huì)面臨同一個(gè)靈魂拷問(wèn):無(wú)刷驅(qū)動(dòng)方案,到底選方波驅(qū)動(dòng)還是FOC驅(qū)動(dòng)?網(wǎng)上的說(shuō)法眾說(shuō)紛紜:有人說(shuō)FOC驅(qū)動(dòng)是高端標(biāo)配,靜音又高效,選方波就是低端;也有人說(shuō)暴力風(fēng)扇場(chǎng)景里
    的頭像 發(fā)表于 02-27 09:00 ?446次閱讀
    其利天下:方波驅(qū)動(dòng) VS FOC 驅(qū)動(dòng),<b class='flag-5'>暴力</b>風(fēng)扇到底該選哪種驅(qū)動(dòng)方案?

    其利天下:13 萬(wàn)轉(zhuǎn)高性能暴力風(fēng)扇無(wú)刷驅(qū)動(dòng)方案

    其利天下作為深耕無(wú)刷電機(jī)驅(qū)動(dòng)領(lǐng)域的專業(yè)方案商,專為暴力風(fēng)扇行業(yè)提供成熟穩(wěn)定、可快速量產(chǎn)的暴力風(fēng)扇無(wú)刷驅(qū)動(dòng)方案,方案核心采用自研高性能MCU芯片,覆蓋手持涵道風(fēng)扇、工業(yè)高速風(fēng)扇等多場(chǎng)景暴力風(fēng)扇驅(qū)動(dòng)需求
    的頭像 發(fā)表于 02-26 14:00 ?359次閱讀
    其利天下:13 萬(wàn)轉(zhuǎn)高性能<b class='flag-5'>暴力</b>風(fēng)扇無(wú)刷驅(qū)動(dòng)方案

    轉(zhuǎn)速稱王!揭秘其利天下13萬(wàn)轉(zhuǎn)暴力風(fēng)扇驅(qū)動(dòng)方案

    高轉(zhuǎn)速、強(qiáng)風(fēng)力與緊湊便攜的完美結(jié)合,正推動(dòng)著暴力風(fēng)扇在戶外、工業(yè)及專業(yè)清潔領(lǐng)域的迅速普及。作為領(lǐng)先的暴力風(fēng)扇方案商,深圳市其利天下技術(shù)開(kāi)發(fā)有限公司,基于對(duì)極限性能與可靠性的深刻理解,推出業(yè)界領(lǐng)先
    的頭像 發(fā)表于 02-05 14:36 ?4419次閱讀
    轉(zhuǎn)速稱王!揭秘其利天下13萬(wàn)轉(zhuǎn)<b class='flag-5'>暴力</b>風(fēng)扇驅(qū)動(dòng)方案

    線性搜索與二分搜索介紹

    搜索算法,搜索過(guò)程從數(shù)組的中間元素開(kāi)始,如果中間元素正好是要查找的元素,則搜索過(guò)程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開(kāi)始一樣從中間元素開(kāi)始比較。
    發(fā)表于 12-01 07:36

    京東拍立淘API開(kāi)發(fā)指南:從零開(kāi)始構(gòu)建圖像搜索應(yīng)用

    京東圖片識(shí)別搜索API(拍立淘)是基于深度學(xué)習(xí)的視覺(jué)搜索服務(wù),通過(guò)卷積神經(jīng)網(wǎng)絡(luò)提取圖像特征向量,結(jié)合近似最近鄰搜索算法實(shí)現(xiàn)商品精準(zhǔn)匹配?。該技術(shù)解決了傳統(tǒng)文字搜索難以描述商品外觀的痛點(diǎn)
    的頭像 發(fā)表于 11-09 17:40 ?2161次閱讀

    模數(shù)轉(zhuǎn)換器主要類型有哪些

    模數(shù)轉(zhuǎn)換器采用逐步比較逼近策略,通過(guò)二進(jìn)制搜索算法將模擬信號(hào)轉(zhuǎn)換為數(shù)字值。這類轉(zhuǎn)換器在轉(zhuǎn)換速度和精度之間實(shí)現(xiàn)了良好平衡,廣泛應(yīng)用于中等采樣速率和中等精度的場(chǎng)景,如工業(yè)控制系統(tǒng)和醫(yī)療儀器。
    的頭像 發(fā)表于 11-03 16:36 ?678次閱讀

    領(lǐng)益智造:人形機(jī)器人業(yè)務(wù)已產(chǎn)生收入

    10月23日領(lǐng)益智造在互動(dòng)平臺(tái)透露;人形機(jī)器人業(yè)務(wù)已經(jīng)產(chǎn)生收入;目前已獲得海內(nèi)外機(jī)器人客戶的硬件訂單,包括有零部件、靈巧手、關(guān)節(jié)模組、整機(jī)組裝等。但并未透露海外具體的客戶名稱,以及具體的訂單金額
    的頭像 發(fā)表于 10-23 11:29 ?1296次閱讀

    微店關(guān)鍵詞搜索接口核心突破:動(dòng)態(tài)權(quán)重算法與語(yǔ)義引擎的實(shí)戰(zhàn)落地

    本文詳解微店搜索接口從基礎(chǔ)匹配到智能推薦的技術(shù)進(jìn)階路徑,涵蓋動(dòng)態(tài)權(quán)重、語(yǔ)義理解與行為閉環(huán)三大創(chuàng)新,助力商家提升搜索轉(zhuǎn)化率、商品曝光與用戶留存,實(shí)現(xiàn)技術(shù)驅(qū)動(dòng)的業(yè)績(jī)?cè)鲩L(zhǎng)。
    的頭像 發(fā)表于 10-15 14:38 ?439次閱讀

    用拼多多 API 實(shí)現(xiàn)拼多多店鋪商品搜索權(quán)重提升

    將分步講解如何利用 API 實(shí)現(xiàn)這一目標(biāo),確保內(nèi)容真實(shí)可靠。 1. 理解搜索權(quán)重及其重要性 搜索權(quán)重是平臺(tái)算法對(duì)商品排名的綜合評(píng)分,基于多個(gè)因素計(jì)算。例如: 關(guān)鍵詞相關(guān)性:商品標(biāo)題和描述與用戶
    的頭像 發(fā)表于 08-19 17:23 ?798次閱讀
    用拼多多 API 實(shí)現(xiàn)拼多多店鋪商品<b class='flag-5'>搜索</b>權(quán)重提升

    仁懋MOS:暴力風(fēng)扇高效運(yùn)轉(zhuǎn)的幕后功臣

    暴力風(fēng)扇的世界里,每一次強(qiáng)勁風(fēng)力的輸出,都離不開(kāi)眾多精密器件的協(xié)同工作。而仁懋電子的MOSFET(金屬氧化物半導(dǎo)體場(chǎng)效應(yīng)晶體管),憑借其出色的性能,成為了暴力風(fēng)扇產(chǎn)品的關(guān)鍵選擇。下面,就為大家?guī)?lái)
    的頭像 發(fā)表于 07-24 17:43 ?974次閱讀
    仁懋MOS:<b class='flag-5'>暴力</b>風(fēng)扇高效運(yùn)轉(zhuǎn)的幕后功臣

    【HarmonyOS next】ArkUI-X休閑益智連連看【進(jìn)階】

    ;: 統(tǒng)一UI描述:ArkTS聲明式語(yǔ)法在雙端生成原生UI組件 共享核心邏輯:TypeScript編寫(xiě)的游戲算法(如BFS路徑搜索)直接復(fù)用 原生渲染引擎:各平臺(tái)使用系統(tǒng)原生渲染管線(
    發(fā)表于 06-28 21:51

    【HarmonyOS next】ArkUI-X休閑益智猜字謎【基礎(chǔ)】

    下圖是在iOS中的運(yùn)行效果 下圖是在HarmonyOS中的運(yùn)行效果 今天咱們來(lái)聊聊如何用ArkUI-X這個(gè)新興框架實(shí)現(xiàn)跨端開(kāi)發(fā),通過(guò)一個(gè)猜字謎小游戲帶大家感受它的開(kāi)發(fā)魅力。本文不僅能讓你看到
    發(fā)表于 06-26 20:01

    笙泉高轉(zhuǎn)速暴力風(fēng)扇控制方案(MDF101A)登場(chǎng)

    本帖最后由 noctor 于 2025-5-21 10:32 編輯 笙泉高轉(zhuǎn)速\"暴力風(fēng)扇\"控制方案(MDF101A)登場(chǎng) 手持暴力風(fēng)扇需求穩(wěn)定成長(zhǎng) 隨著全球氣溫
    發(fā)表于 05-20 15:32