给定2d矩阵,找到从左上角到右下角的路径。假设至少存在一条路径,而您只需要找到一条有效路径。您可以在任何位置上,右,下,左移动。
例如,给定
[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]
Java解决方案
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
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);
}
} }
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。