美文网首页
面试题12: 矩阵中的路径(动态规划1)

面试题12: 矩阵中的路径(动态规划1)

作者: mark_x | 来源:发表于2019-10-07 01:17 被阅读0次
package cn.zxy.interview;

import java.util.Arrays;
import java.util.HashMap;

/**
 * 回溯法:
 * 到达一个节点后, 首先判断该节点是否满足条件, 如果不满足, 递归返回;
 * 如果满足, 更新相应的访问记录及目标, 然后向下试探节点
 * 如果所有向下的节点不满足, 则该节点无效, 取消记录, 向上回溯
 */

public class A12_TwoDimensionPath {
    public static boolean hasPath(int[][] a, int rows, int columns, String str){
        int[][] visited = new int[100][100];


        int pathLength = 0;
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                if(hasPathCore(a, i, j, str, pathLength, visited)){
                    return true;
                }
            }
        }
        return false;
    }

    private static boolean hasPathCore(int[][] a, int row, int column, String str, int pathLength, int[][] visited) {
        // 当匹配长度等于字符长度时, 匹配成功
        if (pathLength == str.length()) return true;

        boolean hasPath = false;
        // 判断该节点是否满足匹配目标
        if(row >= 0 && row < a.length && column >= 0 && column < a[0].length
                && a[row][column] == str.charAt(pathLength)
                && visited[row][column] != 1){

            System.out.println((char)a[row][column]);
            pathLength++;
            visited[row][column] = 1;


            // 向下判断
            hasPath = hasPathCore(a, row, column-1, str, pathLength, visited)
                   || hasPathCore(a, row-1, column, str, pathLength, visited)
                   || hasPathCore(a, row, column+1, str, pathLength, visited)
                   || hasPathCore(a, row+1, column, str, pathLength, visited);
            // 递归返回
            if(hasPath){
                System.out.println("(" + row + ", " + column + ") -- " + (char)a[row][column]);
            }else{
                pathLength--;
                visited[row][column] = 0;
            }
        }
        return hasPath;
    }


    public static void main(String[] args) {

        int[][] a = {{'a', 'b', 't', 'g'},
                     {'c', 'f', 'c', 's'},
                     {'j', 'd', 'e', 'h'}};

        boolean hasPath = hasPath(a, 3, 4, "bfce");

    }
}

相关文章

  • 面试题12: 矩阵中的路径(动态规划1)

  • 2.4.3 回溯法

    面试题12:矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩...

  • 矩阵中的路径

    《剑指offer》面试题12:矩阵中的路径 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有...

  • Leetcode --- 矩阵路径问题(动态规划)

    1.最小路径和(64 - 中) 题目描述:给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角...

  • 面试题12:矩阵中的路径

    注意输入的是一维数组

  • 面试题12:矩阵中的路径

    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可...

  • 面试题12:矩阵中的路径

    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每...

  • 面试题12:矩阵中的路径

    题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,...

  • 面试题12:矩阵中的路径

    题目 设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每...

  • 面试题12:矩阵中的路径

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格...

网友评论

      本文标题:面试题12: 矩阵中的路径(动态规划1)

      本文链接:https://www.haomeiwen.com/subject/dbmppctx.html