标签:rows matrix idx 路径 矩阵 cols 算法 flags str
题目描述
分析
利用回溯法,从矩阵任一点开始,向四周试探,若满足字符顺序,则走一步并继续试探,直到字符串搜索结束返回true。如果都不满足,则回溯继续搜索。由于不能重复走同一个格子,需要一个额外的布尔数组记录走过的路径,同时,在回溯时要将走过的当前格子标记清除。
代码(已AC)
public class Solution {
public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
{
boolean[] flags = new boolean[matrix.length];
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
if(judge(matrix,i,j,rows,cols,str,0,flags)) return true;
}
}
return false;
}
public boolean judge(char[] matrix,int i, int j, int rows, int cols, char[] str, int idx, boolean[] flags){
int index = i*cols+j;
if(i<0 || j<0 || i>=rows || j>=cols || flags[index] || matrix[index]!=str[idx]) return false;
if(idx == str.length-1) return true;
flags[index] = true;
if( judge(matrix, i+1, j, rows, cols, str, idx+1, flags) ||
judge(matrix, i-1, j, rows, cols, str, idx+1, flags) ||
judge(matrix, i, j+1, rows, cols, str, idx+1, flags) ||
judge(matrix, i, j-1, rows, cols, str, idx+1, flags))
return true;
flags[index] = false; // 回溯
return false;
}
}
标签:rows,matrix,idx,路径,矩阵,cols,算法,flags,str 来源: https://blog.csdn.net/Steven_L_/article/details/105920116
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。