zoukankan      html  css  js  c++  java
  • 剑指Offer(Java版)第十一题(解法一):请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。 如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。 例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下划线标出)。

    /*请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
    路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。
    如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。
    例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下划线标出)。
    但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,
    路径不能再次进入这个格子。
    A B T G
    C F C S
    J D E H
    */
    //参考的网上的例子,结果存疑,思路可以借鉴
    import java.util.*;

    public class Class11 {

    public boolean findPath(char[] matrix, int rows, int cols, char[] str){
    if(matrix == null || rows <= 0 || cols <= 0 || str == null){
    return false;
    //throw new RuntimeException("输入的数据不符合要求");
    }
    boolean[] isFinded = new boolean[rows * cols];
    for(boolean f : isFinded){
    f = false;
    }
    int pathLength = 0;
    for(int row = 0; row < rows; row++){
    for(int col = 0; col < cols; col++){
    if(findPathMain(matrix,rows,cols,row,col,str,pathLength,isFinded)){
    return true;
    }
    }
    }
    return false;
    }

    public boolean findPathMain(char[] matrix, int rows, int cols, int row, int col, char[] str, int pathLength, boolean[] isFinded){
    if(row < 0 || col < 0 || row > rows || col > cols || isFinded[row*cols + col] == true || str[pathLength] != matrix[row*cols + col]){
    return false;
    }
    if(pathLength == str.length - 1){
    return true;
    }
    boolean findPath = false;
    isFinded[row*cols + col] = true;
    findPath = findPathMain(matrix,rows - 1,cols,row,col,str,pathLength + 1,isFinded)
    ||findPathMain(matrix,rows + 1,cols,row,col,str,pathLength + 1,isFinded)
    ||findPathMain(matrix,rows,cols - 1,row,col,str,pathLength + 1,isFinded)
    ||findPathMain(matrix,rows,cols + 1,row,col,str,pathLength + 1,isFinded);
    if(!findPath){
    isFinded[row*cols + col]= false;
    }
    return findPath;

    }
    public void test1() {
    char[] matrix = "ABTGCFCSJDEH".toCharArray();
    int rows = 3;
    int cols = 4;
    char[] str = "abfb".toCharArray();
    if (!findPath(matrix, rows, cols, str))
    System.out.println("Test1 passed.");
    else
    System.out.println("Test1 failed.");
    }
    public void test2() {
    char[] matrix = "ABTGCFCSJDEH".toCharArray();
    int rows = 3;
    int cols = 4;
    char[] str = "ABFB".toCharArray();
    if (!findPath(matrix, rows, cols, str))
    System.out.println("Test2 passed.");
    else
    System.out.println("Test2 failed.");
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Class11 c = new Class11();
    c.test1();
    c.test2();
    }

    }

  • 相关阅读:
    二、项目和框架矩阵
    一、PowerDesigner概述(系统分析与建模)
    Visual Studio Code 常用插件整理
    IntelliJ IDEA 显示行号
    IntelliJ IDEA 常用快捷键
    MyEclipse中常用的快捷键
    使用Oracle数据库,对某个表频繁更新
    更改MyEclipse中的src目录的浏览方式
    nginx最大并发连接数的思考:worker_processes、worker_connections、worker_rlimit_nofile
    Nginx性能优化
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12442805.html
Copyright © 2011-2022 走看看