add new solutions

This commit is contained in:
kanna5 2026-01-05 16:48:03 +09:00
parent 886b5e0a8e
commit 67cad91898
Signed by: kkyy
GPG key ID: 06332F3965E9B0CF
47 changed files with 1549 additions and 1 deletions

View file

@ -0,0 +1,48 @@
package q994
func orangesRotting(grid [][]int) int {
w, h := len(grid[0]), len(grid)
queue := make([][3]int, 0, w+h) // row, col, minute
nFresh, nRot := 0, 0
for r := range grid {
for c := range grid[0] {
switch grid[r][c] {
case 1:
nFresh++
case 2:
nRot++
queue = append(queue, [3]int{r, c, 0})
}
}
}
var rot = func(r, c, minute int) {
if r < 0 || c < 0 || r >= h || c >= w || grid[r][c] != 1 {
return
}
grid[r][c] = 2
nFresh--
nRot++
queue = append(queue, [3]int{r, c, minute})
}
minutes := 0
for ; len(queue) > 0; queue = queue[1:] {
cur := queue[0]
r, c, minute := cur[0], cur[1], cur[2]
minutes = max(minute, minutes)
rot(r, c+1, minute+1)
rot(r, c-1, minute+1)
rot(r+1, c, minute+1)
rot(r-1, c, minute+1)
}
if nFresh == 0 {
return minutes
}
return -1
}
var _ = orangesRotting