zoukankan      html  css  js  c++  java
  • 矩阵中的路径

    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。

    java:

     1 public class Solution {
     2     private static final int[][] next = {{0,1} , {0,-1} , {1,0} , {-1,0}} ;
     3     private int rows ;
     4     private int cols ;
     5     public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
     6     {
     7         if (rows == 0 || cols == 0)
     8             return false ;
     9         this.rows = rows ;
    10         this.cols = cols ;
    11         boolean[][] mark  = new boolean[rows][cols] ;
    12         char[][] arr = init(matrix) ;
    13         for(int i = 0 ; i < rows ; i++){
    14             for(int j = 0 ; j < cols ; j++){
    15                 if (backtrcking(arr,str,mark,0,i,j))
    16                     return true ;
    17             }
    18         }
    19         return false ;
    20     }
    21     
    22     private boolean backtrcking(char[][] arr , char[] str , boolean[][] mark , int curLen , int r , int c){
    23         if (curLen == str.length)
    24             return true ;
    25         if (r < 0 || r >= rows || c < 0 || c >= cols || mark[r][c] || arr[r][c] != str[curLen])
    26             return false ;
    27         mark[r][c] = true ;
    28         for(int[] n : next){
    29             if (backtrcking(arr,str,mark,curLen+1,r+n[0],c+n[1]))
    30                 return true ;
    31         }
    32         mark[r][c] = false ;
    33         return false ;
    34     }
    35     
    36     private char[][] init(char[] matrix){
    37         char[][] arr = new char[rows][cols] ;
    38         int k = 0 ;
    39         for(int i = 0 ; i < rows ; i++){
    40             for(int j = 0 ; j < cols ; j++){
    41                 arr[i][j] = matrix[k++] ;
    42             }
    43         }
    44         return arr ;
    45     }
    46 
    47 
    48 }
  • 相关阅读:
    数字电路与系统-公式规则知识点
    数字电路与系统-门电路基本知识1
    数字电路与系统-数制与编码2
    数字电路与系统-数制与编码1
    数字电路与系统-知识点2
    数字电路与系统-知识点1
    数字电路与系统-编码器
    数字电路与系统-组合逻辑电路的竞争冒险现象3
    数字电路与系统-组合逻辑电路的竞争冒险现象2
    前端工程师提高工作效率的几个小技巧
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10627457.html
Copyright © 2011-2022 走看看