我选择的语言是Dijkstra算法的有效版本-在本例中为Swift。
您可能知道,该算法要求您在节点上放置临时标签-但是可以在不更改原始类的情况下实现。作为参考,这里是一个缩减的节点类,但是这个问题与语言无关,因为我只想知道如何在不更改原始类的情况下实现它。
class Node: Hashable {
var nodes = [Int:[Int]]()
var children = [Node]()
}
答案 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)
}
}
}
这样您就不会更改原始类。