public class FindPath12_ {
public static void main(String[] args) {
char[][] arr = {{'a', 'b', 't', 'g'},
{'c', 'f', 'c', 's'},
{'j', 'd', 'e', 'h'}};
char[] str = {'b', 'f', 'c', 'e'};
System.out.println(hasPath(arr,str));
}
private static boolean hasPath(char[][] arr, char[] str) {
boolean[][] visited = new boolean[arr.length][arr[0].length];
int pathLen = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
if (findPath(arr, arr.length, arr[0].length, i, j, visited, pathLen, str)) {
return true;
}
}
}
return false;
}
private static boolean findPath(char[][] arr, int rows, int cols, int i, int j, boolean[][] visited, int pathLen, char[] str) {
if (pathLen == str.length)
return true;
boolean hasPath = false;
if (i >= 0 && i < rows && j >= 0 && j < cols && arr[i][j]==str[pathLen] && !visited[i][j]) {
pathLen ++;
visited[i][j] = true;
hasPath = findPath(arr, rows, cols, i + 1, j, visited, pathLen, str)
|| findPath(arr, rows, cols, i - 1, j, visited, pathLen, str)
|| findPath(arr, rows, cols, i, j + 1, visited, pathLen, str)
|| findPath(arr, rows, cols, i, j - 1, visited, pathLen, str);
if (!hasPath) {
pathLen --;
visited[i][j] = false;
}
}
return hasPath;
}
}
剑指offer12 矩阵中的路径 Java
猜你喜欢
转载自blog.csdn.net/weixin_43065507/article/details/99329840
今日推荐
周排行