代码之家  ›  专栏  ›  技术社区  ›  stevenpcurtis

在不修改原始节点的情况下对Dijkstra算法进行编码

  •  0
  • stevenpcurtis  · 技术社区  · 7 年前

    我有一个使用我选择的语言的dijkstra算法的工作版本——在本例中是swift。

    正如您可能知道的,该算法要求您在节点上放置临时标签——但是否可以在不更改原始类的情况下实现。这里的参考是一个简化的节点类,但是这个问题不依赖于语言,因为我只想知道如何在不更改原始类的情况下实现它。

    class Node: Hashable {
        var nodes = [Int:[Int]]()
        var children = [Node]()
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Cristik    7 年前

    一个半黑客解决方案是使用相关对象:

    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)
            }
        }
    }
    

    这样就不会更改原始类。