mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 00:25:22 +08:00
update: leetcode 1034 solution && readme
This commit is contained in:
@ -5,49 +5,46 @@ type point struct {
|
||||
y int
|
||||
}
|
||||
|
||||
var (
|
||||
borders []point
|
||||
type gridInfo struct {
|
||||
m int
|
||||
n int
|
||||
vis [][]bool
|
||||
dirs []point
|
||||
q []point
|
||||
grid [][]int
|
||||
originalColor int
|
||||
)
|
||||
}
|
||||
|
||||
func colorBorder(grid [][]int, row, col, color int) [][]int {
|
||||
m, n = len(grid), len(grid[0])
|
||||
vis = make([][]bool, m)
|
||||
m, n := len(grid), len(grid[0])
|
||||
dirs := []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
|
||||
vis := make([][]bool, m)
|
||||
for i := range vis {
|
||||
vis[i] = make([]bool, n)
|
||||
}
|
||||
dirs = []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
|
||||
originalColor = grid[row][col]
|
||||
borders = []point{}
|
||||
q = []point{{row, col}}
|
||||
bfs(q, grid)
|
||||
var borders []point
|
||||
gInfo := gridInfo{
|
||||
m: m,
|
||||
n: n,
|
||||
grid: grid,
|
||||
originalColor: grid[row][col],
|
||||
}
|
||||
dfs(row, col, gInfo, dirs, vis, &borders)
|
||||
for _, p := range borders {
|
||||
grid[p.x][p.y] = color
|
||||
}
|
||||
return grid
|
||||
}
|
||||
|
||||
func bfs(q []point, grid [][]int) {
|
||||
for len(q) != 0 {
|
||||
ele := q[0]
|
||||
vis[ele.x][ele.y] = true
|
||||
q = q[1:]
|
||||
isBorder := false
|
||||
for _, dir := range dirs {
|
||||
nx, ny := ele.x+dir.x, ele.y+dir.y
|
||||
if !(0 <= nx && nx < m && 0 <= ny && ny < n && grid[nx][ny] == originalColor) {
|
||||
isBorder = true
|
||||
} else if !vis[nx][ny] {
|
||||
q = append(q, point{nx, ny})
|
||||
}
|
||||
}
|
||||
if isBorder {
|
||||
borders = append(borders, point{ele.x, ele.y})
|
||||
func dfs(x, y int, gInfo gridInfo, dirs []point, vis [][]bool, borders *[]point) {
|
||||
vis[x][y] = true
|
||||
isBorder := false
|
||||
for _, dir := range dirs {
|
||||
nx, ny := x+dir.x, y+dir.y
|
||||
if !(0 <= nx && nx < gInfo.m && 0 <= ny && ny < gInfo.n && gInfo.grid[nx][ny] == gInfo.originalColor) {
|
||||
isBorder = true
|
||||
} else if !vis[nx][ny] {
|
||||
dfs(nx, ny, gInfo, dirs, vis, borders)
|
||||
}
|
||||
}
|
||||
if isBorder {
|
||||
*borders = append(*borders, point{x, y})
|
||||
}
|
||||
}
|
||||
|
@ -62,50 +62,47 @@ type point struct {
|
||||
y int
|
||||
}
|
||||
|
||||
var (
|
||||
borders []point
|
||||
type gridInfo struct {
|
||||
m int
|
||||
n int
|
||||
vis [][]bool
|
||||
dirs []point
|
||||
q []point
|
||||
grid [][]int
|
||||
originalColor int
|
||||
)
|
||||
}
|
||||
|
||||
func colorBorder(grid [][]int, row, col, color int) [][]int {
|
||||
m, n = len(grid), len(grid[0])
|
||||
vis = make([][]bool, m)
|
||||
m, n := len(grid), len(grid[0])
|
||||
dirs := []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
|
||||
vis := make([][]bool, m)
|
||||
for i := range vis {
|
||||
vis[i] = make([]bool, n)
|
||||
}
|
||||
dirs = []point{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
|
||||
originalColor = grid[row][col]
|
||||
borders = []point{}
|
||||
q = []point{{row, col}}
|
||||
bfs(q, grid)
|
||||
var borders []point
|
||||
gInfo := gridInfo{
|
||||
m: m,
|
||||
n: n,
|
||||
grid: grid,
|
||||
originalColor: grid[row][col],
|
||||
}
|
||||
dfs(row, col, gInfo, dirs, vis, &borders)
|
||||
for _, p := range borders {
|
||||
grid[p.x][p.y] = color
|
||||
}
|
||||
return grid
|
||||
}
|
||||
|
||||
func bfs(q []point, grid [][]int) {
|
||||
for len(q) != 0 {
|
||||
ele := q[0]
|
||||
vis[ele.x][ele.y] = true
|
||||
q = q[1:]
|
||||
isBorder := false
|
||||
for _, dir := range dirs {
|
||||
nx, ny := ele.x+dir.x, ele.y+dir.y
|
||||
if !(0 <= nx && nx < m && 0 <= ny && ny < n && grid[nx][ny] == originalColor) {
|
||||
isBorder = true
|
||||
} else if !vis[nx][ny] {
|
||||
q = append(q, point{nx, ny})
|
||||
}
|
||||
}
|
||||
if isBorder {
|
||||
borders = append(borders, point{ele.x, ele.y})
|
||||
func dfs(x, y int, gInfo gridInfo, dirs []point, vis [][]bool, borders *[]point) {
|
||||
vis[x][y] = true
|
||||
isBorder := false
|
||||
for _, dir := range dirs {
|
||||
nx, ny := x+dir.x, y+dir.y
|
||||
if !(0 <= nx && nx < gInfo.m && 0 <= ny && ny < gInfo.n && gInfo.grid[nx][ny] == gInfo.originalColor) {
|
||||
isBorder = true
|
||||
} else if !vis[nx][ny] {
|
||||
dfs(nx, ny, gInfo, dirs, vis, borders)
|
||||
}
|
||||
}
|
||||
if isBorder {
|
||||
*borders = append(*borders, point{x, y})
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user