码迷,mamicode.com
首页 > 其他好文 > 详细

刷题记录-剑指offer12:矩阵中的路径

时间:2020-05-04 17:23:52      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:回溯法   style   图片   str   public   记录   越界   题记   bool   

技术图片

 

 用递归实现回溯法

注意:对于越界的检查是row>=matrix.length和col>=matrix[0].length要加上等号(这个错误找了半个小时呜呜呜)

public class Solution {
    private int[][] act = {{0,1},{0,-1},{-1,0},{1,0}};
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
    {
        if(matrix.length==0)
            return false;
        char[][] array = makematrix(matrix, rows, cols);
        boolean[][] marked = new boolean[rows][cols];
        int pathlen = 0;
        for(int i = 0; i<rows; i++){
            for(int j = 0;j<cols;j++){
                if(backtrack(array, marked, str, pathlen,i, j))
                    return true;
            }
        }
        return false;
    }
    public boolean backtrack(char[][] matrix, boolean[][] marked, char[] str, int pathlen, int row, int col){
        if(pathlen == str.length)
            return true;
        if(row<0||row>=matrix.length||col<0||col>=matrix[0].length||marked[row][col]||matrix[row][col]!=str[pathlen])
            return false;
        pathlen++;
        marked[row][col] = true;
        for(int[] n: act){
            if(backtrack(matrix, marked, str, pathlen,row+n[0], col+n[1]))
                return true;
        }
        marked[row][col] = false;
        return false;
    }
    public char[][] makematrix(char[]matrix, int row, int col){
        char[][] array = new char[row][col];
        for(int i = 0, idx = 0; i<row; i++){
            for(int j = 0; j<col; j++){
                array[i][j] = matrix[idx++];
            }
        }
        return array;
    }
}

 

刷题记录-剑指offer12:矩阵中的路径

标签:回溯法   style   图片   str   public   记录   越界   题记   bool   

原文地址:https://www.cnblogs.com/tendermelon/p/12827139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!