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