# Find a Path in a Matrix

Given a 2d matrix, find a path from the top left corner to bottom right corner. Assume there exists at least one path, and you only need to find one valid path. You can move up, right, down, left at any position.

For example, given

```[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]
```

A valid path is

```[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 Solution

```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); } } }```
Category >> Algorithms
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```