一个使用 A* 算法的 Swift Package 迷宫求解器。
定义一个 enum
来描述每个方块类型,它需要实现 MazeSquareType
协议。
例如:
import Foundation
import MazeSolver
enum MyMazeSquareType: Character, MazeSquareType {
case empty = "."
case wall = "#"
case start = "S" // Optional
case end = "E" // Optional
var isEmpty: Bool {
self == .empty || self == .start || self == .end
}
var isWall: Bool {
self == .wall
}
// Optional
var isStart: Bool {
self == .start
}
// Optional
var isEnd: Bool {
self == .end
}
}
可以通过几种方式初始化迷宫。
let maze = try Maze<MyMazeSquareType>(
squares: [
[
MazeSquare(type: .empty, position: Position(x: 0, y: 0)),
...
],
[
MazeSquare(type: .wall, position: Position(x: 0, y: 1)),
...
],
...
]
)
let input = """
######
#...E#
#.##.#
#S.#.#
######
"""
let maze = try Maze<MyMazeSquareType>(input: input)
let mazeFileURL: URL = ...
let maze = try Maze<MyMazeSquareType>(fileURL: mazeFileURL)
let result = maze.findShortestPath()
print(result.steps)
print(result.path)