From 191570102359fd10af8fddfc609cdf70a895a4b3 Mon Sep 17 00:00:00 2001 From: ductnn Date: Thu, 21 Dec 2023 00:31:21 +0700 Subject: [PATCH] add sol --- .../nearestExitFromEntranceInMaze.go | 38 ++++++++++++++ .../994.RottingOranges/rottingOranges.go | 49 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 leetcode/leetcode75/Graphs-BFS/1926.NearestExitFromEntranceInMaze/nearestExitFromEntranceInMaze.go create mode 100644 leetcode/leetcode75/Graphs-BFS/994.RottingOranges/rottingOranges.go diff --git a/leetcode/leetcode75/Graphs-BFS/1926.NearestExitFromEntranceInMaze/nearestExitFromEntranceInMaze.go b/leetcode/leetcode75/Graphs-BFS/1926.NearestExitFromEntranceInMaze/nearestExitFromEntranceInMaze.go new file mode 100644 index 0000000..d2f21e9 --- /dev/null +++ b/leetcode/leetcode75/Graphs-BFS/1926.NearestExitFromEntranceInMaze/nearestExitFromEntranceInMaze.go @@ -0,0 +1,38 @@ +// https://leetcode.com/problems/nearest-exit-from-entrance-in-maze + +package main + +import "fmt" + +func nearestExit(maze [][]byte, entrance []int) int { + m, n := len(maze), len(maze[0]) + q := [][]int{entrance} + maze[entrance[0]][entrance[1]] = '+' + ans := 0 + dirs := []int{-1, 0, 1, 0, -1} + for len(q) > 0 { + ans++ + for k := len(q); k > 0; k-- { + p := q[0] + q = q[1:] + for l := 0; l < 4; l++ { + x, y := p[0]+dirs[l], p[1]+dirs[l+1] + if x >= 0 && x < m && y >= 0 && y < n && maze[x][y] == '.' { + if x == 0 || x == m-1 || y == 0 || y == n-1 { + return ans + } + q = append(q, []int{x, y}) + maze[x][y] = '+' + } + } + } + } + return -1 +} + +func main() { + maze := [][]byte{{'+', '+', '.', '+'}, {'.', '.', '.', '+'}, {'+', '+', '+', '.'}} + entrance := []int{1, 2} + + fmt.Println(nearestExit(maze, entrance)) +} diff --git a/leetcode/leetcode75/Graphs-BFS/994.RottingOranges/rottingOranges.go b/leetcode/leetcode75/Graphs-BFS/994.RottingOranges/rottingOranges.go new file mode 100644 index 0000000..855e542 --- /dev/null +++ b/leetcode/leetcode75/Graphs-BFS/994.RottingOranges/rottingOranges.go @@ -0,0 +1,49 @@ +// https://leetcode.com/problems/rotting-oranges + +package main + +import ( + "fmt" +) + +func orangesRotting(grid [][]int) int { + m, n := len(grid), len(grid[0]) + cnt := 0 + var q [][]int + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if grid[i][j] == 2 { + q = append(q, []int{i, j}) + } else if grid[i][j] == 1 { + cnt++ + } + } + } + ans := 0 + dirs := []int{-1, 0, 1, 0, -1} + for len(q) > 0 && cnt > 0 { + ans++ + for i := len(q); i > 0; i-- { + p := q[0] + q = q[1:] + for j := 0; j < 4; j++ { + x, y := p[0]+dirs[j], p[1]+dirs[j+1] + if x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1 { + cnt-- + grid[x][y] = 2 + q = append(q, []int{x, y}) + } + } + } + } + if cnt > 0 { + return -1 + } + return ans +} + +func main() { + grid := [][]int{{2, 1, 1}, {1, 1, 0}, {0, 1, 1}} + + fmt.Println(orangesRotting(grid)) +}