mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-25 03:11:41 +08:00
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package leetcode
|
|
|
|
import (
|
|
"github.com/halfrost/LeetCode-Go/template"
|
|
)
|
|
|
|
func regionsBySlashes(grid []string) int {
|
|
size := len(grid)
|
|
uf := template.UnionFind{}
|
|
uf.Init(4 * size * size)
|
|
for i := 0; i < size; i++ {
|
|
for j := 0; j < size; j++ {
|
|
switch grid[i][j] {
|
|
case '\\':
|
|
uf.Union(getFaceIdx(size, i, j, 0), getFaceIdx(size, i, j, 1))
|
|
uf.Union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 3))
|
|
case '/':
|
|
uf.Union(getFaceIdx(size, i, j, 0), getFaceIdx(size, i, j, 3))
|
|
uf.Union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 1))
|
|
case ' ':
|
|
uf.Union(getFaceIdx(size, i, j, 0), getFaceIdx(size, i, j, 1))
|
|
uf.Union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 1))
|
|
uf.Union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i, j, 3))
|
|
}
|
|
if i < size-1 {
|
|
uf.Union(getFaceIdx(size, i, j, 2), getFaceIdx(size, i+1, j, 0))
|
|
}
|
|
if j < size-1 {
|
|
uf.Union(getFaceIdx(size, i, j, 1), getFaceIdx(size, i, j+1, 3))
|
|
}
|
|
}
|
|
}
|
|
count := 0
|
|
for i := 0; i < 4*size*size; i++ {
|
|
if uf.Find(i) == i {
|
|
count++
|
|
}
|
|
}
|
|
return count
|
|
}
|
|
|
|
func getFaceIdx(size, i, j, k int) int {
|
|
return 4*(i*size+j) + k
|
|
}
|