Non recursive Queue/Tree solution implementation

This commit is contained in:
semblanceofsense
2025-02-01 15:09:47 -07:00
parent fe768dadc4
commit 5644b23e33
4 changed files with 77 additions and 27 deletions

View File

@@ -2,12 +2,14 @@ package solvemaze
import (
"mazesolver/internal/getmaze"
"mazesolver/util/queue"
)
func FindPath(maze getMaze.Maze) []getMaze.Point {
returnSlice := make([]getMaze.Point, 0)
debugMaze := GetDebugMaze(maze)
findPathRecursive(maze[1][1], maze, &returnSlice, debugMaze)
//debugMaze := GetDebugMaze(maze)
//findPathRecursive(maze[1][1], maze, &returnSlice, debugMaze)
findPathNonRecursive(maze, maze[1][1], &returnSlice)
return returnSlice
}
@@ -49,3 +51,42 @@ func GetDebugMaze(maze getMaze.Maze) getMaze.Maze {
}
return a
}
func findPathNonRecursive(maze getMaze.Maze, root getMaze.Point, slice *[]getMaze.Point) {
next := buildMaze(maze, root)
for next != nil {
*slice = append(*slice, *next)
next = next.Parent
}
}
func buildMaze(maze getMaze.Maze, root getMaze.Point) *getMaze.Point {
Q := make(queue.Queue[getMaze.Point], 0)
root.Value = -1
Q.Enqueue(root)
for len(Q) > 0 {
v := Q.Dequeue()
if v.Value == 9 {
return (&v)
}
for _, w := range getAdjacent(v, maze) {
if (w.Value == 0 || w.Value == 9) {
maze[w.Y][w.X].Value = -1
w.Parent = &v
Q.Enqueue(w)
}
}
}
return nil
}
func contains(maze getMaze.Maze, val int) bool {
for _, v := range maze {
for _, vv := range v {
if vv.Value == val {
return true
}
}
}
return false
}