日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

力扣--- 滑动谜题

發布時間:2024/4/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣--- 滑动谜题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

力扣— 滑動謎題

文章目錄

  • 力扣--- 滑動謎題
    • 一、題目描述
    • 二、問題分析
    • 三、代碼

一、題目描述


二、問題分析

對于這種計算 最小步數的問題,我們就要敏感地想到 BFS 算法。

這個題目轉化成 BFS 問題是有一些技巧的,我們面臨如下問題:

  • 1、一般的 BFS算法,是從一個起點start開始,向終點target進行尋路,但是拼圖問題不是在尋路,而是在不斷交換數字,這應該怎么轉化成 BFS算法問題呢?
  • 2、即便這個問題能夠轉化成 BFS 問題,如何處理起點start和終點target?它們都是數組哎,把數組放進隊列,套 BFS框架,想想就比較麻煩且低效。
  • 首先回答第一個問題,BFS 算法并不只是一個尋路算法,而是一種暴力搜索算法,只要涉及暴力窮舉的問題,BFS就可以用,而且可以最快地找到答案。
  • 你想想計算機怎么解決問題的?哪有那么多奇技淫巧,本質上就是把所有可行解暴力窮舉出來,然后從中找到一個最優解罷了。
  • 明白了這個道理,我們的問題就轉化成了:如何窮舉出board當前局面下可能衍生出的所有局面?這就簡單了,看數字 0 的位置唄,和上下左右的數字進行交換就行了:

  • 這樣其實就是一個 BFS 問題,每次先找到數字 0,然后和周圍的數字進行交換,形成新的局面加入隊列……當第一次到達target時,就得到了贏得游戲的最少步數。
  • 對于第二個問題,我們這里的board僅僅是 2x3 的二維數組,所以可以壓縮成一個一維字符串。其中比較有技巧性的點在于,二維數組有「上下左右」的概念,壓縮成一維后,如何得到某一個索引上下左右的索引?

很簡單,我們只要手動寫出來這個映射就行了:

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

這個含義就是,在一維字符串中,索引i在二維數組中的的相鄰索引為neighbor[i]

三、代碼

至此,我們就把這個問題完全轉化成標準的 BFS 問題了,借助之前 BFS 算法框架套路詳解 的代碼框架(算法模塊的博客),直接就可以套出解法代碼了:

int slidingPuzzle(vector<vector<int>>& board) {int m = 2, n = 3;string start = "";string target = "123450";// 將 2x3 的數組轉化成字符串for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {start.push_back(board[i][j] + '0');}}// 記錄一維字符串的相鄰索引vector<vector<int>> neighbor = {{ 1, 3 },{ 0, 4, 2 },{ 1, 5 },{ 0, 4 },{ 3, 1, 5 },{ 4, 2 }};/******* BFS 算法框架開始 *******/queue<string> q;unordered_set<string> visited;q.push(start);visited.insert(start);int step = 0;while (!q.empty()) {int sz = q.size();for (int i = 0; i < sz; i++) {string cur = q.front(); q.pop();// 判斷是否達到目標局面if (target == cur) {return step;}// 找到數字 0 的索引int idx = 0;for (; cur[idx] != '0'; idx++);// 將數字 0 和相鄰的數字交換位置for (int adj : neighbor[idx]) {string new_board = cur;swap(new_board[adj], new_board[idx]);// 防止走回頭路if (!visited.count(new_board)) {q.push(new_board);visited.insert(new_board);}}}step++;}return -1;/******* BFS 算法框架結束 *******/ }

至此,這道題目就解決了,其實框架完全沒有變,套路都是一樣的,我們只是花了比較多的時間將滑動拼圖游戲轉化成 BFS 算法。

總結

以上是生活随笔為你收集整理的力扣--- 滑动谜题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av一级网站 | 91超碰免费在线 | 久久一区视频 | www.色播.com | 精品一区二区三区毛片 | 日韩视频播放 | 久久国产劲爆∧v内射 | 手机在线免费视频 | 成人免费精品 | 热久久久 | 中文字幕亚洲乱码熟女一区二区 | 视频一区国产精品 | 影音先锋成人资源 | 中文字幕在线播放av | 欧美日韩综合在线观看 | 91视频最新地址 | 国内精品久久久久久久久 | 免费观看成年人视频 | 免费视频日韩 | 老司机精品福利导航 | 日韩美女做爰高潮免费 | 久久精品123 | 精品久久久久中文慕人妻 | 一级做a爰片久久毛片潮喷 天天透天天干 | 精品亚洲一区二区三区 | 蜜臀在线视频 | 欧洲激情网 | 91精品国产综合久久久蜜臀图片 | 激情另类视频 | 日本黄页视频 | 波多野在线 | 中文字幕在线观看精品 | 特级丰满少妇一级aaaa爱毛片 | 国产综合内射日韩久 | 黄色片www | 99久久久无码国产精品性青椒 | 久久久久久一区 | 香蕉影院在线观看 | 成人在线免费观看网址 | 亚洲国产综合网 | 国产午夜精品一区二区三区嫩草 | 伊人久久精品视频 | 精品一区二区三区精华液 | 成人18网站 | 欧美日韩一级黄色片 | 免费精品在线 | 欧美激情二区三区 | 欧美丝袜一区二区三区 | 黄色小视频网 | 成人小视频免费观看 | 精品产国自在拍 | av直接看 | 懂色av| 69av视频| 日一区二区三区 | 波多野结衣精品 | 久久精品国产77777蜜臀 | 77久久 | 91网页入口 | 色戒电影未测减除版 | 麻豆国产精品视频 | 久久精品欧美一区 | 国产又大又黄视频 | 在线视频免费观看一区 | 欧美视频在线观看一区 | 99这里精品| 欧美男女交配 | av无码精品一区二区三区宅噜噜 | 中文av一区二区三区 | 看一级大片| 新香蕉视频 | 最近国语视频在线观看免费播放 | 久久在线看| 亚洲激情久久 | 亚洲网站色 | a级片免费在线观看 | 99国产视频在线 | 国产一区二区 | 黄色片a| а√天堂www在线天堂小说 | 欧美日韩18| 杂技xxx裸体xxxx欧美 | 国产伦精品免费视频 | 亚洲天天看 | 成人免费一区二区三区在线观看 | 大尺度做爰呻吟舌吻网站 | 成年视频在线观看 | 中文字幕33页 | 婷婷综合在线观看 | 天堂√8在线中文 | 久久久久久91亚洲精品中文字幕 | 国产精品久久无码一三区 | 亚洲国产成人精品久久 | 国产毛片久久久久久久 | 午夜在线一区二区三区 | 日日摸天天添天天添破 | 国产一区二区三区影视 | 一本色道久久综合 | 在线免费观看视频你懂的 |