给定一个二维矩阵,找到从左上角到右下角的路径。 假设至少存在一条路径,您只需要找到一条有效路径即可。 您可以在任何位置向上、向右、向下、向左移动。
例如,给定
[1, 0, 0, 0, 0]
[1, 0, 1, 1, 1]
[1, 1, 1, 0, 1]
[1, 0, 0, 0, 1]
[1, 0, 0, 0, 1]
一个有效的路径是
[1, 0, 0, 0, 0]
[1, 0, 1, 1, 1]
[1, 1, 1, 0, 1]
[0, 0, 0, 0, 1]
[0, 0, 0, 0, 1]
public int[][] findPath(int[][] matrix){
int m = matrix.length;
int[][] result = new int[m][m];
ArrayList<int[]> temp = new ArrayList<int[]>();
ArrayList<int[]> list = new ArrayList<int[]>();
dfs(matrix, 0, 0, temp, list);
for(int i=0; i<list.size(); i++){
result[list.get(i)[0]][list.get(i)[1]]=1;
//System.out.println(Arrays.toString(list.get(i)));
}
result[0][0]=1;
return result;
}
public void dfs(int[][] matrix, int i, int j,
ArrayList<int[]> temp, ArrayList<int[]> list){
int m=matrix.length;
if(i==m-1 && j==m-1){
list.clear();
list.addAll(temp);
return;
}
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
for(int k=0; k<4; k++){
int x = i+dx[k];
int y = j+dy[k];
if(x>=0 && y>=0 && x<=m-1 && y<=m-1 && matrix[x][y]==1){
temp.add(new int[]{x,y});
int prev = matrix[x][y];
matrix[x][y]=0;
dfs(matrix, x, y, temp, list);
matrix[x][y]=prev;
temp.remove(temp.size()-1);
}
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.dailycodebuffer.com/find-a-path-in-a-matrix-java/
内容来源于网络,如有侵权,请联系作者删除!