package com.asong.leetcode.MatrixPath;
public class Solution1 {
public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
{
//边界条件
if(matrix==null||matrix.length==0||rows<=0||cols<=0||str.length==0||str==null||(rows*cols)!=matrix.length){
return false;
}
//定一个矩阵来进行坐标识
//标记数组,记录节点都是被访问,初始化都是false
boolean[] visited = new boolean[matrix.length];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if(Judge(matrix,rows,cols,i,j,str,visited,0))
{
return true;
}
}
}
return false;
}
//定义Judge()方法判断从字符串得第一个字符开始
//i,j分别表示当前索引的位置
public static boolean Judge(char[] matrix,int rows,int cols,int row,int col,char[] str,boolean[] visited,int k)
{
int index = row*cols+col;
//递归终止条件
if(row<0||col<0||row>=rows||col>=cols||matrix[index]!=str[k]||visited[index]==true){
return false;
}
if(k == str.length-1)
{
return true;
}
//标记
visited[index] = true;
if(Judge(matrix,rows,cols,row-1,col,str,visited,k+1)||
Judge(matrix,rows,cols,row,col-1,str,visited,k+1)||
Judge(matrix,rows,cols,row+1,col,str,visited,k+1)||
Judge(matrix,rows,cols,row,col+1,str,visited,k+1))
{
return true;
}
visited[index] =false;
return false;
}
}