package 练习;
//矩阵中的路径
/**
* 题解
* 使用分解的思想
* 在查找的过程中,如果查找的位置超出了原本数组的大小,或者已经被查找,或者这个字符与目标字符不匹配都要返回false
* 当index>str.length时,证明已经查找成功
* 要先判断成功,因为如果刚好是下一个超出位置或者其他原因会判断失败
* 唯一要主要的就是数组传递引用,其他递归会改变visit的值
*/
public class JuZhenZhongDeLuJing {
public boolean hasPath(char[] matrix, int rows, int cols, char[] str){
char[][] array =new char[rows][cols];
int[][] visit=new int[rows][cols];
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++)
visit[i][j]=0;
}
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
array[i][j]=matrix[i*cols+j];
System.out.print(array[i][j]+" ");
}
System.out.println();
}
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
System.out.println(i+" "+j);
if(merge(array,visit,rows,cols,str,0,i,j)){
return true;
}
}
}
// System.out.println(merge(array,visit,rows,cols,str,0,rows-1,cols-1));
return false;
}
public boolean merge(char[][] array,int[][] visit,int rows,int cols,char[] str,int index,int srow,int scol){
if(index>=str.length)
return true;
if(scol < 0 || srow < 0 ||srow>=rows||scol>=cols||visit[srow][scol]==1){
return false;
}
if(str[index]!=array[srow][scol]){
return false;
}
System.out.println(str[index]);
visit[srow][scol]=1;
index++;
boolean isTrue = merge(array, visit, rows, cols, str, index, srow, scol+1)||
merge(array, visit, rows, cols, str, index, srow, scol-1)||
merge(array, visit, rows, cols, str, index, srow+1, scol)||
merge(array, visit, rows, cols, str, index, srow-1, scol);
visit[srow][scol] = 0;
return isTrue;
}
}
矩阵中的路径
最新推荐文章于 2021-03-12 23:47:15 发布