迷宫求解器

一个使用 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)