剑指offer——矩阵中的路径

来源:互联网 发布:淘宝网刺绣夹ceng背心 编辑:程序博客网 时间:2024/06/05 10:58

题目描述

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


思路:

选取一个节点(i,j)为起始点,递归遍历这个节点上下左右的元素是否和待匹配的字符数组中元素相同,相同则继续遍历这个相同节点的上下左右元素,不同则后退回来。

public class Solution {    public boolean hasPath(char[] matrix, int rows, int cols, char[] str)    {    if(rows<1||cols<1)return false;boolean visited [][] = new boolean[rows][cols];for(int i =0;i<rows;i++){for(int j=0;j<cols;j++){                System.out.println(i+" "+j);if(isPath(matrix,rows,cols,str,visited,0,i,j)){//从str的第0个位置开始判定return true;}}//for j}//for ireturn false;    }   public boolean isPath(char[] matrix, int rows, int cols, char[] str,boolean visited [][],int index,int i,int j){if(i<0||j<0||i>=rows||j>=cols||str[index]!=matrix[i*cols+j]||visited[i][j]){//注意把i,j的判定写前面,不然会数组越界return false;}visited [i][j]=true;if(index==str.length-1)return true;index++;if(isPath(matrix, rows, cols, str, visited, index, i+1, j)||//上isPath(matrix, rows, cols, str, visited, index, i, j-1)||//左isPath(matrix, rows, cols, str, visited, index, i, j+1)||//右isPath(matrix, rows, cols, str, visited, index, i-1, j)){//下return true;}visited[i][j]=false;//如果四个都不是,则把这个探测过的点又重置回去return false;}}


0 0
原创粉丝点击