417. Pacific Atlantic Water Flow dfs

来源:互联网 发布:飞毛腿跑腿软件好吗 编辑:程序博客网 时间:2024/05/21 22:43
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);        }    }}
1 0