题解 | 走迷宫
走迷宫
https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n, m int
fmt.Fscan(reader, &n, &m)
var sx, sy, ex, ey int
fmt.Fscan(reader, &sx, &sy, &ex, &ey)
sli := make([]string, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &sli[i])
}
sx--
sy--
ex--
ey--
addX := [4]int{0, 0, 1, -1}
addY := [4]int{1, -1, 0, 0}
visited := make([][]int, n)
for k := range visited {
visited[k] = make([]int, m)
for j := range visited[k] {
visited[k][j] = -1
}
}
visited[sx][sy] = 0
type p struct {
x, y int
}
check := make([]p, 0, n)
check = append(check, p{sx, sy})
for len(check) > 0 {
cp := check[0]
check = check[1:]
if cp.x == ex && cp.y == ey {
fmt.Print(visited[cp.x][cp.y])
return
}
for i := 0; i < 4; i++ {
nx := cp.x + addX[i]
ny := cp.y + addY[i]
if nx >= 0 && ny >= 0 && nx < n && ny < m && visited[nx][ny] == -1 && sli[nx][ny] == '.' {
visited[nx][ny] = visited[cp.x][cp.y] + 1
check = append(check, p{nx, ny})
}
}
}
fmt.Print(-1)
}
