无需修改原始Node即可对Dijkstra的算法进行编码

时间:2019-01-24 10:13:56

标签: swift algorithm

我选择的语言是Dijkstra算法的有效版本-在本例中为Swift。

您可能知道,该算法要求您在节点上放置临时标签-但是可以在不更改原始类的情况下实现。作为参考,这里是一个缩减的节点类,但是这个问题与语言无关,因为我只想知道如何在不更改原始类的情况下实现它。

class Node: Hashable {
    var nodes = [Int:[Int]]()
    var children = [Node]()
}

1 个答案:

答案 0 :(得分:1)

一种半hacky解决方案是使用关联的对象:

fileprivate var labelKey: UInt8 = 0
extension Node {
    var label: Int {
        get {
            return objc_getAssociatedObject(self, &labelKey) as? Int ?? 0
        }
        set {
            objc_setAssociatedObject(self, &labelKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}

这样您就不会更改原始类。