maze-solver-go/solver/solver.go

55 lines
829 B
Go
Raw Permalink Normal View History

package solver
import (
"fmt"
"maze-solver/maze"
)
type Solver interface {
Solve(*maze.Maze) *maze.SolvedMaze
}
type SolverFactory struct {
Type *string
}
const (
2023-08-15 17:22:10 +02:00
_DFS = "dfs"
_BFS = "bfs"
_Dijkstra = "dijkstra"
2023-08-15 18:43:18 +02:00
_AStar = "a-star"
)
var TYPES = []string{
_DFS,
_BFS,
2023-08-15 17:22:10 +02:00
_Dijkstra,
2023-08-15 18:43:18 +02:00
_AStar,
}
2023-08-17 13:37:54 +02:00
func (f *SolverFactory) Get(solved_chan chan<- *maze.SolvedMaze) Solver {
switch *f.Type {
case _DFS:
2023-08-17 13:37:54 +02:00
return &DFSSolver{
solved_chan: solved_chan,
}
case _BFS:
2023-08-17 13:37:54 +02:00
return &BFSSolver{
solved_chan: solved_chan,
}
2023-08-15 18:43:18 +02:00
case _AStar:
2023-08-17 13:37:54 +02:00
return &AStarSolver{
solved_chan: solved_chan,
}
2023-08-15 17:22:10 +02:00
case _Dijkstra:
2023-08-17 13:37:54 +02:00
return &DijkstraSolver{
solved_chan: solved_chan,
}
}
panic(fmt.Sprintf("Unrecognized solver type %q", *f.Type))
}
2023-08-15 15:42:53 +02:00
func visited(node *maze.Node) bool {
return node == nil || node.Visited
}