精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

尋找矩陣中的路徑

開發(fā) 架構
給定一個矩陣和一個字符串,如何從矩陣中尋找出這個字符串在矩陣中的路徑?本文就跟大家分享下如何使用回溯法來解決這個問題,歡迎各位感興趣的開發(fā)者閱讀本文。

[[411074]]

本文轉載自微信公眾號「神奇的程序員K」,作者神奇的程序員K。轉載本文請聯系神奇的程序員K公眾號。

前言

給定一個矩陣和一個字符串,如何從矩陣中尋找出這個字符串在矩陣中的路徑?本文就跟大家分享下如何使用回溯法來解決這個問題,歡迎各位感興趣的開發(fā)者閱讀本文。

實現思路

我們先從題目給出的條件入手,逐步分析得出思路,矩陣就是一個二維數組,字符串可以切割成一個數組,我們要做的就是按順序取出字符串中的每個字符,判斷其是否在矩陣中,能否組成一條完整的路徑出來。

舉例分析

現有一個矩陣(如下所示),有一個字符串bfce,我們需要從矩陣中找出這個字符串在矩陣中所連接起來的路徑。

  1. a  b  t  g 
  2. c  f  c  s 
  3. j  d  e  h 

我們從矩陣的[0][0]位置作為入口開始尋找,要查找的第1個字符為b:

  • 0,0 位置的元素是a,與目標值不匹配,繼續(xù)尋找0,1位置
  • 0,1 位置的元素是是b,與目標值匹配,繼續(xù)查找第2個字符f
    • 更新尋找方向,向下查找
  • 1,1 位置的元素是f,與目標值匹配,繼續(xù)查找第3個字符c
    • 更新尋找方向,向下查找
  • 2,1 位置的元素是d,與目標值不匹配,回到上一步1,1位置
    • 更新尋找方向,向上查找,
    • 0,0位置的值已經尋找過了,回到上一步1,1位置
    • 更新尋找方向,向右查找
  • 1,2 位置的元素是c,與目標值匹配,繼續(xù)查找第4個字符e
    • 更新尋找方向,向下查找
  • 2,2 位置的元素是e,與目標值匹配,所有字符尋找完畢,該路徑存在與矩陣中

保存每一步已找到元素在矩陣中的索引

  • [2,2]位置
  • [1,2]位置
  • [1,1]位置
  • [0,1]位置

最終路徑為:[0][1]、[1][1]、[1][2]、[2][2]

思路分析

通過上述舉例,我們可以總結出下述思路:

  • 尋找一個切入點,從第一個字符開始尋找其在矩陣中的位置
  • 進入矩陣后,每一步都會有4個移動方向:下、上、右、左
  • 每移動一個方向,都會判斷移動后位置的值是否與當前要查找的字符是否相等
    • 如果相等,則標識當前位置的元素為已訪問狀態(tài),沿著四個移動方向繼續(xù)尋找下一個字符
    • 如果不相等,則回到上一步的位置點,嘗試其他的三個方向是否有匹配的元素
  • 重復步驟3,直至所有匹配字符的四個方向都被移動
    • 字符串中的全部字符都被找到后,則取出每一步的正確索引位置將其保存起來
    • 四個方向都被移動后,仍未找到與字符所匹配的元素,則證明該字符串不存在于矩陣中

注意:我們在矩陣中找到與目標字符匹配的元素后,我們需要將這個位置的元素先存起來,然后再改成. 用于標識這個元素已經訪問過了,當所有元素找到后再將存儲起來的值進行還原。

實現代碼

我們分析出思路后,接下來我們來看下實現代碼,代碼分為2部分:

  • 主函數,用于參數規(guī)則判斷、尋找切入點、返回找到的路徑
  • 尋找路徑函數,用于在矩陣中尋找每一個字符

主函數

主函數接受2個參數:路徑矩陣、目標字符串

  • 我們需要先對參數進行判空
  • 遍歷矩陣從0,0位置開始尋找路徑
  • 路徑找到則返回路徑索引,否則返回目標路徑不存在

代碼實現如下:

  1. export default class Backtracking { 
  2.   // 目標路徑在矩陣中的索引 
  3.   private readonly pathIndex: Array<string>; 
  4.  
  5.   constructor() { 
  6.     this.pathIndex = []; 
  7.   } 
  8.    
  9.   public findMatrixPath( 
  10.     matrix: Array<Array<string>>, 
  11.     target: string 
  12.   ): Array<string> { 
  13.     if (target === "") { 
  14.       this.pathIndex.push("參數錯誤: 目標路徑為空"); 
  15.       return this.pathIndex; 
  16.     } 
  17.     for (let i = 0; i < matrix.length; i++) { 
  18.       for (let j = 0; j < matrix[i].length; j++) { 
  19.         if (this.findPath(matrix, target, i, j, 0)) { 
  20.           return this.pathIndex; 
  21.         } 
  22.       } 
  23.     } 
  24.     // 未找到 
  25.     this.pathIndex.push("目標路徑不存在于矩陣中"); 
  26.     return this.pathIndex; 
  27.   } 

尋找路徑函數

尋找路徑函數接受5個參數:路徑矩陣、目標字符串、要尋找的行、要尋找的列、要尋找的字符索引

  • 首先,我們需要判斷下要尋找的行、列是否超越矩陣的界限
  • 矩陣中要尋找的行、列位置的元素與要尋找的字符不相等則直接返回false
  • 判斷所有字符是否都查找完成
    • 完成的話則存儲行、列索引,返回true
    • 未完成則保存當前行、列處的值、修改該位置的值為.用于標識為已訪問狀態(tài)
  • 從當前坐標點位置沿著其四個方向:下、上、右、下進行查找
  • 查找完成后保存已找到字符的坐標點,還原當前位置所保存的值

代碼實現如下:

  1. private findPath( 
  2.   matrix: Array<Array<string>>, 
  3.   target: string, 
  4.   row: number, 
  5.   col: number, 
  6.   index: number 
  7. ): boolean { 
  8.   // 邊界條件判斷 
  9.   //  1. 行、列值越界直接返回false 
  10.   //  2. matrix[row][col]位置的元素與當前要查找的字符不等,證明這個路徑走不通 
  11.   if ( 
  12.     row >= matrix.length || 
  13.     row < 0 || 
  14.     col >= matrix[0].length || 
  15.     col < 0 || 
  16.     matrix[row][col] != target[index
  17.   ) { 
  18.     return false
  19.   } 
  20.   // 所有字符都已查找完成 
  21.   if (index === target.length - 1) { 
  22.     // 保存最后一個字符在矩陣中的坐標 
  23.     this.pathIndex.unshift(`[${row}][${col}]`); 
  24.     return true
  25.   } 
  26.   // 保存當前坐標值 
  27.   const tmp = matrix[row][col]; 
  28.   // 修改當前坐標的值,標識當前坐標點已經被尋找 
  29.   matrix[row][col] = "."
  30.   // 開始遞歸: 沿著當前坐標的上下左右4個方向查找 
  31.   const res: boolean = 
  32.     this.findPath(matrix, target, row + 1, col, index + 1) || 
  33.     this.findPath(matrix, target, row - 1, col, index + 1) || 
  34.     this.findPath(matrix, target, row, col + 1, index + 1) || 
  35.     this.findPath(matrix, target, row, col - 1, index + 1); 
  36.   // 本輪遞歸完成,找到了當前要查找字符在矩陣中的位置 
  37.   if (res) { 
  38.     // 保存當前要查找字符的坐標點 
  39.     this.pathIndex.unshift(`[${row}][${col}]`); 
  40.   } 
  41.   // 遞歸完成,復原當前坐標 
  42.   matrix[row][col] = tmp; 
  43.   return res; 

完整代碼請移步:Backtracking.ts

編寫測試用例

接下來,我們將上述例子代入我們實現的函數中,測試下是否正確。

  1. import Backtracking from "../Backtracking.ts"
  2.  
  3. const pathArr = [ 
  4.   ["a""b""t""g"], 
  5.   ["c""f""c""s"], 
  6.   ["j""d""e""h"
  7. ]; 
  8. const target = "bfce"
  9. const backtracking = new Backtracking(); 
  10. const findResult = backtracking.findMatrixPath(pathArr, target); 
  11. console.log(`${target}在矩陣中的路徑索引為`, findResult); 

執(zhí)行結果如下所示:

 

責任編輯:武曉燕 來源: 神奇的程序員K
相關推薦

2012-08-10 09:59:47

2011-02-17 09:58:16

WindowsUbuntu

2017-05-22 10:54:56

深度學習CNNMNIST

2014-10-13 17:04:28

IT運維管理

2017-12-26 14:27:24

2022-02-18 10:34:58

自動駕駛

2014-10-20 11:14:43

2009-04-09 10:17:00

2018-05-09 12:27:34

Linux命令尋找文件

2012-05-10 17:12:43

創(chuàng)新工場燈泡工場

2010-12-20 12:33:55

2021-07-06 07:01:35

旋轉數組數字

2023-01-03 11:47:47

2021-12-04 23:00:01

人工智能數據數字化轉型

2021-04-01 16:36:07

macOS文件夾磁盤

2022-10-24 15:56:55

PythonPyTorchGPU 計算

2024-10-23 09:05:07

PixijsMatrixTransform

2020-05-13 15:10:04

矩陣乘法深度學習人工智能-

2021-06-02 09:36:49

物聯網惡意軟件IoT

2021-06-03 10:16:15

物聯網安全物聯網設備惡意軟件
點贊
收藏

51CTO技術棧公眾號

欧美做受高潮1| 日韩美女天天操| 亚洲精品美女久久7777777| 日韩国产亚洲欧美| 欧美激情1区| 国产视频精品一区二区三区| 婷婷六月天在线| 欧美xxxx黑人又粗又长| 91麻豆福利精品推荐| 国产精品久久婷婷六月丁香| 中文字幕亚洲欧美日韩| 久久最新网址| 欧美va亚洲va| 99热一区二区| 日韩在线伦理| 亚洲日本青草视频在线怡红院| 国产在线精品日韩| 91麻豆成人精品国产| 日韩视频一区| 欧美成人网在线| 久久精品—区二区三区舞蹈| julia中文字幕一区二区99在线| 在线视频综合导航| 国产精品无码一区二区在线| 免费在线看a| 久久久久久久久久久99999| 97夜夜澡人人双人人人喊| 成年人晚上看的视频| 亚洲黄色影院| 久久精品国产精品| 欧美另类z0zx974| 少妇精品导航| 日韩一区二区三区电影在线观看 | 精品久久一区二区三区蜜桃| 国产在成人精品线拍偷自揄拍| 老鸭窝毛片一区二区三区| 欧美日韩不卡合集视频| 婷婷丁香综合网| 欧美三级情趣内衣| 亚洲欧美国产精品久久久久久久| 99热超碰在线| 91精品尤物| 日韩一二三区不卡| 黄色一级片免费播放| 国产精品高潮久久| 欧美在线免费观看视频| 日本成人在线免费视频| 亚洲女同志freevdieo| 亚洲福中文字幕伊人影院| 玖玖精品在线视频| 国产在线更新| 亚洲精品乱码久久久久久久久| 宅男在线精品国产免费观看| 午夜伦理在线| 亚洲视频一区在线| 大桥未久一区二区三区| 黄色一级片在线观看| 国产精品久久久久天堂| 一区二区欧美日韩| 免费av网站在线观看| 国产精品高潮久久久久无| 亚洲午夜精品一区二区| 欧美天天影院| 亚洲激情图片小说视频| 日韩极品视频在线观看| wwww在线观看免费视频| 欧美日韩国内自拍| 国产视频一区二区视频| 国产精品久久久久77777丨| 欧美性猛交xxxxx水多| 国产精品wwwww| 免费在线成人激情电影| 欧美高清性hdvideosex| 久久久久无码精品| 国产精品久久久网站| 日韩精品在线观看视频| jizz中文字幕| 一区二区三区毛片免费| 欧美精品激情blacked18| 中国一级免费毛片| 青青草97国产精品免费观看| 91精品国产综合久久香蕉的用户体验| 97人妻一区二区精品免费视频 | 尤物网站在线观看| 午夜a一级毛片亚洲欧洲| 国产一区二区三区三区在线观看| 四虎影视一区二区| 黄色亚洲大片免费在线观看| 青青青国产精品一区二区| 在线视频免费观看一区| 国产成人精品三级| 任我爽在线视频精品一| caoporn免费在线| 欧美日韩激情小视频| 亚洲欧美激情网| 日韩视频一二区| 亚洲日韩中文字幕在线播放| 成人在线观看高清| 久久国产免费| 99se婷婷在线视频观看| 免费播放片a高清在线观看| 日韩毛片视频在线看| 91视频最新入口| 激情综合婷婷| 亚洲三级免费看| 久久午夜无码鲁丝片| 日本视频在线一区| 国产精品一区二区av| 春暖花开成人亚洲区| 亚洲一区二区精品久久av| 亚洲第一狼人区| 思热99re视热频这里只精品| 久久在精品线影院精品国产| 国产无套丰满白嫩对白| 国产精品一区二区不卡| 少妇特黄a一区二区三区 | 亚洲二区视频在线| 日本一二区免费| 九一亚洲精品| 2018日韩中文字幕| 亚洲精品综合久久| 中文字幕一区三区| 欧美在线观看视频网站| 精品国产18久久久久久洗澡| 久久国产精品99国产精| 在线观看国产黄| 国产午夜精品在线观看| 草草久久久无码国产专区| 亚洲啊v在线免费视频| 色偷偷888欧美精品久久久| 欧美黑人一区二区| 成人av资源在线| 成人毛片100部免费看| www.久久99| 日韩在线观看免费| 亚洲特级黄色片| 亚洲国产精品激情在线观看| 中文字幕乱码人妻综合二区三区| 欧美色图五月天| 午夜精品免费视频| 凸凹人妻人人澡人人添| 亚洲国产美女搞黄色| 日本少妇xxx| 中文字幕亚洲精品乱码| 亚洲japanese制服美女| 久久77777| 日韩精品一区二区三区在线播放| 中文字幕电影av| 国产尤物一区二区| 大片在线观看网站免费收看| 国产一区二区久久久久| 精品自拍视频在线观看| www.蜜臀av.com| 亚洲一级在线观看| 妖精视频一区二区| 99精品久久| 久久亚洲高清| 91精品影视| www.欧美三级电影.com| 国产精品嫩草影院桃色| 亚洲另类色综合网站| 亚洲丝袜在线观看| 一区精品久久| 欧美日韩中文国产一区发布| 欧美aaa视频| 久久久av一区| 欧美 日韩 国产 在线| 精品国产成人av| b站大片免费直播| 久久99精品一区二区三区| www.-级毛片线天内射视视| 日韩欧美中文字幕一区二区三区| 韩国一区二区电影| 国产乱视频在线观看| 欧美人动与zoxxxx乱| 久久久精品91| 久久影院视频免费| 欧美一级xxxx| 99pao成人国产永久免费视频| 蜜桃精品久久久久久久免费影院| 午夜无码国产理论在线| 久久香蕉国产线看观看av| 成人av手机在线| 色94色欧美sute亚洲线路二| 永久免费未视频| 成人教育av在线| 亚洲欧美激情网| 黄色日韩在线| 亚洲在线播放电影| 国产精品qvod| 国产又爽又黄的激情精品视频| 色呦呦在线免费观看| 亚洲欧美激情视频| 国产不卡精品视频| 日本韩国欧美一区二区三区| a级黄色片免费看| 日本一区二区三区四区在线视频 | 久久天天躁狠狠躁夜夜躁| 天堂在线观看免费视频| 欧美日韩视频在线一区二区| 精品视频久久久久| 中文字幕亚洲一区二区av在线| 成人做爰www看视频软件| 蜜桃免费网站一区二区三区| 青草青青在线视频| 999成人网| 日本在线观看一区二区| 99re8这里有精品热视频8在线| 国产精品草莓在线免费观看| 成年人视频免费在线播放| 日韩在线观看免费av| 黄网站在线观看| 精品久久人人做人人爱| 一级特黄录像免费看| 日韩欧美成人精品| 日韩av男人天堂| 亚洲精品欧美综合四区| 欧美xxxx精品| 久久精品日韩一区二区三区| 久久性爱视频网站| 国产黄人亚洲片| 亚洲av无日韩毛片久久| 日韩高清欧美激情| 人妻有码中文字幕| 国产日韩一区二区三区在线| 黄黄视频在线观看| 久久精品一区二区不卡| 宅男一区二区三区| 日韩久久精品| 亚洲精品乱码视频| 日韩欧美精品一区| 亚洲欧洲精品一区| 成人一二三区| 视频在线观看成人| 天堂av一区二区三区在线播放| 国产91aaa| 91亚洲无吗| 国产高清不卡av| jizz性欧美23| 精品久久久久亚洲| 五月综合久久| 日本一区高清在线视频| 免费久久精品| 五月天亚洲综合小说网| 波多野结衣在线观看一区二区| 欧美日韩免费精品| 精品视频网站| 一区国产精品| 亚洲国产不卡| 国产免费内射又粗又爽密桃视频| 欧美在线亚洲| 日韩精品一区二区免费| 夜夜嗨一区二区| 日韩a在线播放| 日韩av中文字幕一区二区三区 | 成人一区二区在线观看| 少妇极品熟妇人妻无码| 成人福利视频在线看| 亚洲一级av无码毛片精品| 久久综合色播五月| 蜜臀久久99精品久久久久久| 亚洲国产精品ⅴa在线观看| youjizz亚洲女人| 亚洲男同性视频| 日韩网红少妇无码视频香港| 欧美日韩亚洲精品一区二区三区| 伦av综合一区| 欧美精品日韩精品| www.精品久久| 亚洲午夜女主播在线直播| 伊人在线视频| 久久频这里精品99香蕉| 性高爱久久久久久久久| 国产欧美亚洲视频| 国产精品成人自拍| 香蕉久久夜色| 黄色亚洲精品| 青青在线视频免费| 国产精品性做久久久久久| 天天插天天射天天干| 国产欧美日韩精品一区| 久久精品视频免费在线观看| 欧美日韩免费在线观看| 一本色道久久综合精品婷婷| 欧美电影免费观看完整版 | 久久最新资源网| 高清视频在线观看三级| 国产色视频一区| 老司机在线精品视频| 伊人av成人| 99综合视频| theporn国产精品| 久久久99久久| 久草中文在线视频| 欧美在线一区二区三区| 亚洲春色一区二区三区| 国产一区二区三区在线播放免费观看| 亚洲精品白浆| 国产精品亚洲第一区| 欧美激情99| 欧美另类videosbestsex日本| 久久久久国产精品一区二区| 手机在线播放av| 中文字幕一区二区三区不卡在线| 国产精品16p| 欧美久久久久久蜜桃| 免费a在线观看| 久久久女人电视剧免费播放下载 | 欧美日本一道本| 人操人视频在线观看| 久久99国产综合精品女同| 成人久久网站| 日本高清不卡三区| 亚洲自啪免费| 色综合久久五月| 一区二区在线观看av| 亚洲 小说区 图片区| 日韩av有码在线| missav|免费高清av在线看| 成人黄色av网站| 日本道不卡免费一区| 777米奇影视第四色| 97久久精品人人做人人爽50路| 极品颜值美女露脸啪啪| 欧美精品精品一区| 午夜老司机在线观看| 国产精品99导航| 伊人春色精品| www.亚洲天堂网| 久久综合狠狠综合久久激情 | 精品高清视频| 夜夜嗨av一区二区三区网站四季av| 人妻互换一二三区激情视频| 亚洲日本成人在线观看| 97超视频在线观看| 在线播放日韩av| 成人黄色免费网站| 色噜噜色狠狠狠狠狠综合色一| 久久激情婷婷| www.av天天| 欧美色窝79yyyycom| 第九色区av在线| 国产精品啪视频| 91精品国产成人观看| 亚洲va在线va天堂va偷拍| 亚洲欧洲一区二区三区| 国产精选久久久| 欧美精品在线免费| 91精品啪在线观看国产爱臀 | 日本高清不卡一区二区三| 国产精品久久久久久久免费软件| chinese麻豆新拍video| 欧美日韩色婷婷| 国产天堂素人系列在线视频| 国产精品99导航| 91视频久久| 特黄特黄一级片| 亚洲一区二区三区影院| 天天操天天插天天射| 57pao精品| 欧美一区电影| 国产精品自在自线| 亚洲一区二区av电影| 四虎精品成人影院观看地址| 欧美在线国产精品| 欧美一区2区| 亚洲精品无码久久久久久久| 亚洲一区在线播放| 三级视频在线| 国产精品久久久久久久久久久久久久 | 国产亚洲精品久久777777| 亚洲成人1234| 在线成人视屏| 777久久精品一区二区三区无码 | 国产一区二区不卡视频在线观看| 国产精品综合| eeuss中文字幕| 日韩欧美一级二级三级久久久| 国产污视频在线播放| 日本一区免费观看| 国产中文一区二区三区| 日本熟妇毛茸茸丰满| 在线播放国产一区二区三区| 一区二区亚洲视频| 日韩视频在线免费看| 国产精品久久久久久久久免费相片| 国产普通话bbwbbwbbw| 国产91精品久久久| 香蕉国产精品| 在线观看av中文字幕| 这里只有精品99re| 日韩激情电影| 麻豆映画在线观看| 国产网站一区二区三区| 精品久久在线观看| 国产精品久久久久久久美男 | 亚洲美女淫视频| 激情视频在线观看免费| 97在线电影| 免费高清不卡av|