矩阵中的路径

it2023-10-02  70

public class Solution { boolean flag=false; int xx[]={-1,1,0,0}; int yy[]={0,0,1,-1}; boolean vis[][]; public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { vis=new boolean[rows][cols]; int l=str.length; for(int i=0;i<rows;i++){ for(int j=0;j<cols;j++){ if(matrix[i*cols+j]==str[0]){//每一个符合的元素都可以成为搜索的入口 dfs(matrix,i,j,rows,cols,str,0,l); } } } return flag; } void dfs(char []matrix,int x,int y,int rows,int cols,char[] str,int k,int l){ if(matrix[x*cols+y]==str[k]){///符合的元素 进入下一步的搜索 vis[x][y]=true;//已经访问过 // System.out.println(x+" "+y+" "+k); k++;//已经相同元素的个数 //flag=true; if(k==l){//已经相同元素的个数得到l 一个矩阵中存在一条包含某字符串所有字符的路径 flag=true; return; } for(int i=0;i<4;i++){//按照四个方向进行搜索 int x1=x+xx[i]; int y1=y+yy[i]; if(x1>=0&&x1<rows&&y1>=0&&y1<cols&&vis[x1][y1]==false){///>=0 hhh dfs(matrix,x1,y1,rows,cols,str,k,l); } } vis[x][y]=false;//还原标记 } } }
最新回复(0)