题解 | 走迷宫

走迷宫

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)
}

全部评论

相关推荐

03-28 16:43
佛山大学 Java
点赞 评论 收藏
分享
不知道怎么取名字_:看来现在卷的,这种单位都开始提高要求了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务