根据得到的steps倒推最终路径展示
来源:12-2 迷宫代码实现

此恨绵绵无绝期
2022-02-20
func main(){
// ... 省略视频中代码
fmt.Println("-----路径展示-----")
paths := getPaths(steps,
point{len(maze) - 1, len(maze[0]) - 1})
for _, row := range paths {
for _, val := range row {
fmt.Printf("%3d", val)
}
fmt.Println()
}
}
func getPaths(steps [][]int, end point) [][]int {
paths := make([][]int, len(steps))
for i := range paths {
paths[i] = make([]int, len(steps[i]))
}
//定义最后结束的位置和步数
stepsNumber := steps[len(steps)-1][len(steps[0])-1]
paths[len(steps)-1][len(steps[0])-1] = stepsNumber
cur := end
for stepsNumber > 0 {
for _, dir := range dirs {
last := cur.reduce(dir)
val, ok := last.at(steps)
if ok != true || val != stepsNumber-1 {
continue
}
//如果上一步符合 步数-1的情况,则赋值后跳过当前上左下右探查步骤,进入下一轮探查
stepsNumber--
paths[last.i][last.j] = stepsNumber
cur = last
break
}
}
return paths
}
func (p point) reduce(r point) point {
return point{p.i - r.i, p.j - r.j}
}
写回答
1回答
-
ccmouse
2022-05-10
就是这么做的,有个很小改动可以让代码清晰些:
stepsNumber := steps[len(steps)-1][len(steps[0])-1]
paths[len(steps)-1][len(steps[0])-1] = stepsNumber
这两句可以通过传入的end点来实现,这样以后end不在右下角也能工作
00
相似问题