您的位置:首页 > Web前端

剑指offer2 问题12 矩阵中的路径 Java实现

2017-08-24 20:18 344 查看

题目来源:剑指offer

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子
思路:http://blog.csdn.net/ouyangyanlan/article/details/72874885
import java.util.Arrays;

public class J_JuZhenLujing {
/*  public boolean hasPath(char [][]matrix,String str){
if (matrix.length==0||str.length()==0)
return false;
boolean res=false;
boolean visited[][]=new boolean[matrix.length][matrix[0].length];
for (int i=0;i<matrix.length;i++) {
Arrays.fill(visited[i],false);
}
for (int i=0;i<matrix.length;i++)
for (int j=0;j<matrix[0].length;j++){
res=hasPathCore();
}

}
public boolean hasPathCore(,String str){

}*/
//public class Solution {
public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
{
if(matrix==null || rows<=0 || cols<=0 || str==null){
return false;
}
//if(str.length==0){
//    return true;
//}
boolean[] visited = new boolean[matrix.length];
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
if(findPath(matrix, i, j, rows, cols, 0, visited, str)){
return true;
}
}
}
return false;
}

//尝试寻找路径
public boolean findPath(char[] matrix, int row, int col, int rows, int cols, int k, boolean[] visited, char[] str){
if(row<0 || row>=rows || col<0 || col>=cols || str[k]!=matrix[row*cols+col] || visited[row*cols+col]){
return false;
}
if(k==str.length-1){
return true;
}
visited[row*cols+col] = true;
if(findPath(matrix, row+1, col, rows, cols, k+1, visited, str) || findPath(matrix, row, col+1, rows, cols, k+1, visited, str) || findPath(matrix, row-1, col, rows, cols, k+1, visited, str) || findPath(matrix, row, col-1, rows, cols, k+1, visited, str)){
return true;
}
visited[row*cols+col] = false;
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer 回溯