精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产午夜一区| 欧美不卡高清一区二区三区| youjizz久久| 欧美日韩国产专区| 蜜桃成人在线| 亚洲一级特黄毛片| 欧美日韩第一区| 精品在线欧美视频| 日本中文字幕观看| 成人观看网址| 国产精品成人免费在线| 国产亚洲一区二区三区在线播放| 久久午夜鲁丝片| 狠狠色丁香久久综合频道| 亚洲午夜av久久乱码| 无码专区aaaaaa免费视频| 国产精品人妻一区二区三区| 色婷婷狠狠五月综合天色拍| 欧美日韩一区二区在线观看视频| 欧美大黑帍在线播放| 国产免费视频在线| 天堂一区二区在线| 超碰97人人做人人爱少妇| 97超碰在线免费观看| 日韩一区免费| 欧美精品少妇一区二区三区| av观看免费在线| 久久国产精品黑丝| 亚洲天堂成人网| 欧洲精品久久| 蜜臀99久久精品久久久久小说 | 人人干人人干人人干| 97精品一区| 亚洲一区二区国产| 国产精品久久AV无码| 精品视频一区二区三区| 欧美性大战久久| 日本一本二本在线观看| 黄色软件视频在线观看| 一区二区三区中文在线| 中文字幕一区二区三区四区五区六区| 你懂的在线播放| 97久久精品人人澡人人爽| 国内精品久久久久| 国产草草浮力影院| 麻豆国产精品| 777色狠狠一区二区三区| 国产精品无码一本二本三本色| 黄色片在线看| 久久伊人蜜桃av一区二区| 精品久久蜜桃| 三级av在线播放| 成人国产精品免费观看| 国产91色在线|亚洲| 国产视频一二三四区| 久久66热偷产精品| 国产综合香蕉五月婷在线| 中文天堂在线资源| 蜜桃久久av一区| 国产精品一区电影| 亚洲手机在线观看| 国产在线视频精品一区| 91久久在线观看| 99免费在线视频| 丁香啪啪综合成人亚洲小说 | 久久资源综合| 精品女厕一区二区三区| 2018日日夜夜| 91美女视频在线| 国产精品久久久久久久久久久免费看| 天天人人精品| 秋霞午夜理伦电影在线观看| 成人精品视频.| 国产一区二区三区黄| 香蕉久久国产av一区二区| 丁香婷婷综合激情五月色| 狠狠久久综合婷婷不卡| 免费a在线观看| 国产精品久久久久久久午夜片| 一级做a爰片久久| 视频在线不卡| 国产日韩精品久久久| 亚洲一区不卡在线| 在线午夜影院| 国产精品色哟哟网站| 在线免费观看成人网| 1769免费视频在线观看| 亚洲成人福利片| 密臀av一区二区三区| 一级欧美视频| 亚洲精品久久久久| 无人码人妻一区二区三区免费| 亚洲图色一区二区三区| 日韩久久免费电影| 99热6这里只有精品| 激情久久中文字幕| 国产精品视频精品| 丰满人妻妇伦又伦精品国产| 久久精品国产成人一区二区三区| 91老司机在线| 四虎成人免费在线| 亚洲欧美一区二区三区国产精品 | 国产在线一二区| 三级精品在线观看| 成人自拍爱视频| 国产高清自拍视频在线观看| 亚洲主播在线观看| 二级片在线观看| 国产精品—色呦呦| 欧美午夜寂寞影院| 中文字幕精品视频在线| 天堂美国久久| 国产成人高潮免费观看精品| 精品人妻一区二区三区日产乱码| 久久久激情视频| 久久精品中文字幕一区二区三区| 91社区在线观看播放| 精品日本高清在线播放| 老司机av网站| 欧美wwwww| 国产精品aaaa| 神马久久精品| 亚洲一区二区三区影院| 污免费在线观看| 欧美成人直播| 国产精品高清在线观看| 青青艹在线观看| 97久久精品人人做人人爽50路| 97超碰人人爱| 国产精品天堂蜜av在线播放| 在线成人高清不卡| 中文字幕一区二区三区人妻不卡| 欧美三区视频| 91热精品视频| 麻豆tv在线| 欧美三级电影一区| 欧美大波大乳巨大乳| 国产日韩一区| 国产精品大陆在线观看| 婷婷伊人综合中文字幕| 怡红院av一区二区三区| 成人性生交视频免费观看| 久久成人综合| 国产区亚洲区欧美区| av电影在线网| 欧美视频一区二区三区四区| 日韩乱码人妻无码中文字幕久久| 一本色道久久综合亚洲精品不卡| 韩国精品一区二区三区六区色诱| av资源一区| 精品国产99国产精品| 成都免费高清电影| 免播放器亚洲| 日本一区二区精品视频| 丝袜美腿一区| 中文字幕日韩专区| 亚洲视频在线观看一区二区| 国产精品久久午夜| 日韩 国产 一区| 欧美福利在线| 国产精品一区在线观看| 成人三级高清视频在线看| 日韩国产一区三区| 欧美另类高清videos的特点| 日本一区二区久久| 在线视频观看91| 激情丁香综合| 欧美日韩综合网| 国产盗摄精品一区二区酒店| 精品国产亚洲在线| 圆产精品久久久久久久久久久| 972aa.com艺术欧美| 欧美激情国产精品日韩| 日韩三级在线| 不卡视频一区二区| 亚洲国产欧美日本视频| 一区三区二区视频| www.香蕉视频| 欧美日韩亚洲网| 人人艹在线视频| 国产精品99久久久久久久女警 | 久久九九精品| 午夜啪啪免费视频| 国产精品一区二区中文字幕| 日韩av片永久免费网站| av在线看片| 欧洲av一区二区嗯嗯嗯啊| 日韩精品国产一区| 亚洲一区亚洲| 精品日韩在线播放| 九一国产精品| 3d动漫啪啪精品一区二区免费| 97人人在线视频| 中文字幕无线精品亚洲乱码一区| 国产黄色美女视频| 色悠悠久久综合| 极品颜值美女露脸啪啪| 久久亚区不卡日本| 在线免费黄色网| 麻豆91精品| 久久久久久久香蕉| 水蜜桃精品av一区二区| 久久久精品有限公司| 国产精品xnxxcom| 国产99久久精品一区二区永久免费| www红色一片_亚洲成a人片在线观看_| 亚洲精品97久久| 一区二区美女视频| 一本大道久久精品懂色aⅴ| 国产大学生自拍| 国产精品美女久久久久高潮| 黄色污在线观看| 国产乱子伦视频一区二区三区 | 国产精品亚洲第一| 好男人www社区| 一区二区国产在线观看| 精品视频在线观看一区二区| 日本一二区不卡| 美女视频久久| 日韩激情网站| 国产乱码精品一区二区三区中文 | 精品电影一区二区三区| 一级特黄aaa大片在线观看| 一本大道av一区二区在线播放| 久操免费在线视频| 国产激情一区二区三区桃花岛亚洲| 国产精品视频一区二区三区四区五区| 亚洲最大黄网| 亚洲精品一区国产精品| 久久av电影| 欧美久久久久久久| 日韩高清一级| 精品视频高清无人区区二区三区| 亚洲国产aⅴ精品一区二区| 成人国产精品色哟哟| 亚洲成人va| 国产成人精品电影久久久| 三妻四妾完整版在线观看电视剧 | 不卡av在线播放| 日本视频在线观看| 色阁综合伊人av| 超碰在线播放97| 91精品国产综合久久香蕉的特点| 中文文字幕一区二区三三| 91国模大尺度私拍在线视频| 日本韩国欧美中文字幕| 黑人极品videos精品欧美裸| 日干夜干天天干| 欧美日韩中文字幕| 亚洲 欧美 中文字幕| 91精品福利视频| 这里只有精品国产| 欧美日韩国产另类一区| 91超薄丝袜肉丝一区二区| 欧美一区永久视频免费观看| 国产精品视频无码| 日韩欧美激情一区| 亚洲欧美另类综合| 日韩av在线网| 精品电影在线| 久久精品免费播放| 色噜噜狠狠狠综合欧洲色8| 久久久欧美精品| 天堂网在线最新版www中文网| 清纯唯美亚洲综合| 成人黄色视屏网站| 51国产成人精品午夜福中文下载| 凹凸成人在线| 久久久精品动漫| 四季av在线一区二区三区| 人妻激情另类乱人伦人妻| 亚洲人妖在线| 蜜臀视频一区二区三区| 国产自产视频一区二区三区| 中文字幕18页| 久久精品国产999大香线蕉| 亚洲色图偷拍视频| k8久久久一区二区三区| 精品成人无码一区二区三区| 亚洲精品视频在线观看网站| 欧美一二三区视频| 欧美日韩精品专区| 亚洲精品喷潮一区二区三区| 亚洲久久久久久久久久久| 蜜芽在线免费观看| 久久久久久久97| av激情成人网| 99在线观看视频网站| 免费看av成人| 97超碰在线视| 免费在线观看精品| 国产精品成人99一区无码 | 日韩亚洲视频| 欧美日韩网址| a在线观看免费视频| 亚洲中字在线| 九九九九九九九九| 久久综合资源网| 中文字幕在线观看成人| 色悠久久久久综合欧美99| 亚洲av永久纯肉无码精品动漫| 亚洲欧美一区二区三区久久| 亚洲羞羞网站| 国产精品一区二区三区在线播放| 麻豆精品av| 日本美女爱爱视频| 欧美va天堂在线| 日本成人中文字幕在线| 成人禁用看黄a在线| 成年人视频软件| 色呦呦国产精品| 日本精品999| 美女999久久久精品视频| 九色成人搞黄网站| 欧美日韩一区二区视频在线 | 欧美制服第一页| 91蝌蚪精品视频| 国产精品12p| 麻豆精品在线观看| 国产伦精品一区二区三区视频女| 精品久久久一区二区| 一级片视频在线观看| 欧美成人精品福利| 精品国产白色丝袜高跟鞋| 国产精品美女www| 免费看日本一区二区| 亚洲自偷自拍熟女另类| 夫妻av一区二区| 麻豆chinese极品少妇| 宅男噜噜噜66一区二区66| 888av在线| 国产精自产拍久久久久久| 欧美天天综合| 99草草国产熟女视频在线| 久久免费午夜影院| 国产又大又粗又爽| 亚洲欧美制服第一页| 黑人巨大亚洲一区二区久| 精品亚洲欧美日韩| 亚洲尤物影院| 女~淫辱の触手3d动漫| 日韩欧美中文字幕在线观看 | 91麻豆国产在线观看| 日韩成人在线免费视频| 日韩av在线免播放器| 在线视频超级| 欧美日韩国产一二| 久久最新视频| 人妻精品久久久久中文| 欧美日韩免费观看一区二区三区| 日本在线观看网站| 亚洲在线第一页| 激情综合网址| 欧美 日本 国产| 色av成人天堂桃色av| 成人亚洲综合天堂| 成人黄色免费片| 黄页网站一区| 野外性满足hd| 欧美性猛片aaaaaaa做受| 免费黄色在线看| 操一操视频一区| 在线亚洲自拍| 精品一区二区三孕妇视频| 欧美精品精品一区| 国产又色又爽又黄刺激在线视频| 国产精品推荐精品| 日韩精品欧美精品| www深夜成人a√在线| 精品第一国产综合精品aⅴ| 625成人欧美午夜电影| 亚洲国产高清国产精品| 国产一区二区三区观看| 日韩免费一级片| 国产一区二区三区丝袜| 欧州一区二区三区| 欧美日韩激情视频在线观看| 国产欧美精品区一区二区三区| 国产精品一级视频| 97在线日本国产| 9l亚洲国产成人精品一区二三 | 日韩av在线高清| 欧美大陆国产| 人妻少妇精品无码专区二区| 欧美激情一区二区三区不卡| 精品国产亚洲一区二区麻豆| 欧美亚洲另类视频| 亚洲天堂免费| 在线 丝袜 欧美 日韩 制服| 在线播放中文一区| 女厕盗摄一区二区三区| 国产精品99久久久久久大便| 99久久精品免费| 国产日韩精品suv| 日韩av日韩在线观看| 亚洲一级特黄| 三级黄色免费观看| 亚洲欧美日韩一区二区三区在线| 欧美国产亚洲精品| 91蝌蚪视频在线观看|