import java.util.*;
public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix char字符型二维数组 * @param word string字符串 * @return bool布尔型 */ public boolean hasPath (char[][] matrix, String word) { int len = matrix.length; int len1 = matrix[0].length; boolean[][] is_pass = new boolean[len][len1]; char first = word.charAt(0);
boolean flag = false;
label:for(int i = 0;i < len;i++) {
for(int j = 0;j < len1;j++) {
if(first == matrix[i][j]) {
if(!flag) {
is_pass[i][j] = true;
flag = func(matrix,word.substring(1),is_pass,i,j);
}
}
if(flag) break label;
else clear(is_pass);
}
}
return flag;
}
public boolean func(char[][] matrix, String word, boolean[][] is_pass,int x,int y) {
if(word.equals("")) return true;
boolean flag = false;
int len = matrix.length;
int len1 = matrix[0].length;
char first = word.charAt(0);
if(x < len-1) {
boolean[][] bs = copy(is_pass);
if(!is_pass[x+1][y]) {
if(first == matrix[x+1][y]) {
bs[x+1][y] = true;
flag = func(matrix,word.substring(1),bs,x+1,y);
}
}
}
if(y < len1-1) {
boolean[][] bs = copy(is_pass);
if(!is_pass[x][y+1] && !flag) {
if(first == matrix[x][y+1]) {
bs[x][y+1] = true;
flag = func(matrix,word.substring(1),bs,x,y+1);
}
}
}
if(x > 0) {
boolean[][] bs = copy(is_pass);
if(!is_pass[x-1][y] && !flag) {
if(first == matrix[x-1][y]) {
bs[x-1][y] = true;
flag = func(matrix,word.substring(1),bs,x-1,y);
}
}
}
if(y > 0) {
boolean[][] bs = copy(is_pass);
if(!is_pass[x][y-1] && !flag) {
if(first == matrix[x][y-1]) {
bs[x][y-1] = true;
flag = func(matrix,word.substring(1),bs,x,y-1);
}
}
}
return flag;
}
public boolean[][] copy(boolean[][] is_pass){
int len = is_pass.length;
int len1 = is_pass[0].length;
boolean[][] arr = new boolean[len][len1];
for(int i = 0;i < len;i++) {
for(int j = 0;j < len1;j++) {
arr[i][j] = is_pass[i][j];
}
}
return arr;
}
public void clear(boolean[][] is_pass) {
for(int i = 0;i < is_pass.length;i++) {
for(int j = 0;j < is_pass[i].length;j++) {
is_pass[i][j] = false;
}
}
}
}