public class Solution {
public List<int[]> pacificAtlantic(int[][] matrix) {
List<int[]> ret=new ArrayList<int[]>();
int m=matrix.length;
if(m==0)
return ret;
int n=matrix[0].length;
if(n==0)
return ret;
boolean[][] pvisited=new boolean[m][n];
boolean[][] avisited=new boolean[m][n];
for(int i=0;i<m;i++)
{
DFS(pvisited,matrix,Integer.MIN_VALUE,i,0);
DFS(avisited,matrix,Integer.MIN_VALUE,i,n-1);
}
for(int i=0;i<n;i++){
DFS(pvisited,matrix,Integer.MIN_VALUE,0,i);
DFS(avisited,matrix,Integer.MIN_VALUE,m-1,i);
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
if(pvisited[i][j]&&avisited[i][j]){
ret.add(new int[]{i,j});
}
}
return ret;
}
private void DFS(boolean[][] visited,int[][] matrix,int lastheight,int x,int y){
int[][] dirs=new int[][]{{1,0},{-1,0},{0,1},{0,-1}};
int m=matrix.length;
int n=matrix[0].length;
if(x<0||x>m-1||y<0||y>n-1||visited[x][y]||lastheight>matrix[x][y])
return;
visited[x][y]=true;
for(int[] dir:dirs){
int newx=x+dir[0];
int newy=y+dir[1];
DFS(visited,matrix,matrix[x][y],newx,newy);
}
}
}
417. Pacific Atlantic Water Flow dfs
最新推荐文章于 2020-04-24 11:18:09 发布