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 }
  • 相关阅读:
    解决谷歌高版本没有设置字符编码的选项的问题
    System.nanoTime与System.currentTimeMillis的区别
    jQuery学习笔记(一)
    linux问题
    阿里资源学习
    PHP-Gealman
    php-fpm
    GIT使用
    设置导出的excel数据
    CI框架, 参数验证
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10627457.html
Copyright © 2011-2022 走看看