|  | @@ -2,30 +2,42 @@ var dx []int = []int{1, 0, -1, 0}
 | 
	
		
			
				|  |  |  var dy []int = []int{0, -1, 0, 1}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func pacificAtlantic(matrix [][]int) (res [][]int) {
 | 
	
		
			
				|  |  | -	m, n := len(matrix), len(matrix[0])
 | 
	
		
			
				|  |  | +	m := len(matrix)
 | 
	
		
			
				|  |  | +	if m == 0 {
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	n := len(matrix[0])
 | 
	
		
			
				|  |  | +	if n == 0 {
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  	ocean := make([][]int, m)
 | 
	
		
			
				|  |  |  	for i := 0; i < m; i++ {
 | 
	
		
			
				|  |  |  		ocean[i] = make([]int, n)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	for i := 0; i < m; i++ { // b10: pacific, b01: atlantic
 | 
	
		
			
				|  |  | -		ocean[i][0] |= 2
 | 
	
		
			
				|  |  | -		ocean[i][n-1] |= 1
 | 
	
		
			
				|  |  | +		dfs(matrix, 2, 0, i, ocean, m, n)
 | 
	
		
			
				|  |  | +		dfs(matrix, 1, n-1, i, ocean, m, n)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	for i := 0; i < n; i++ {
 | 
	
		
			
				|  |  | -		ocean[0][i] |= 2
 | 
	
		
			
				|  |  | -		ocean[m-1][i] |= 1
 | 
	
		
			
				|  |  | +		dfs(matrix, 2, i, 0, ocean, m, n)
 | 
	
		
			
				|  |  | +		dfs(matrix, 1, i, m-1, ocean, m, n)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	dfs(matrix, 0, 0, ocean)
 | 
	
		
			
				|  |  |  	for i := 0; i < m; i++ {
 | 
	
		
			
				|  |  | -		for j := 0; j < m; j++ {
 | 
	
		
			
				|  |  | +		for j := 0; j < n; j++ {
 | 
	
		
			
				|  |  |  			if ocean[i][j] == 3 {
 | 
	
		
			
				|  |  | -				res = append(res, []int{j, i})
 | 
	
		
			
				|  |  | +				res = append(res, []int{i, j})
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	return
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func dfs(matrix [][]int, x, y int, ocean [][]int) {
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | +func dfs(matrix [][]int, mask, x, y int, ocean [][]int, m, n int) {
 | 
	
		
			
				|  |  | +	ocean[y][x] |= mask
 | 
	
		
			
				|  |  | +	for i := 0; i < 4; i++ {
 | 
	
		
			
				|  |  | +		nx, ny := x+dx[i], y+dy[i]
 | 
	
		
			
				|  |  | +		if 0 <= nx && nx < n && 0 <= ny && ny < m && ocean[ny][nx]&mask == 0 && matrix[y][x] <= matrix[ny][nx] {
 | 
	
		
			
				|  |  | +			dfs(matrix, mask, nx, ny, ocean, m, n)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 |