algorithm - 节点连接情况的良好类设计是什么?

标签 algorithm oop data-structures

我想像旅行商问题一样设计一张 map 。
有许多节点,一些连接到另一个。
一个节点可以连接到许多其他节点。

我设计了一些,哪个更好?或者也许还有其他更好的设计?
1.)

class Node {
    private int ID;
    private int position-x;
    private int position-y;
}
class Connection {
    private int ID;
    private Node first;
    private Node second;
    public void ConnectTwoNodes( Node a, Node b ) { ... }
}

2.)

class Node {
    private int ID;
    private int position-x;
    private int position-y;
    private ArrayList<Node> anotherNodes; // array of connected nodes
    public void ConnectTo( Node another ) { ... }
}

最佳答案

您的语言似乎是 C++。 你的解决方案1.存在以下问题:

  • Connection 类似乎“聚合”了节点。它应该是 OOspeak 中的一个关联(一个指向 Node 的指针,以使其对凡人而言易于理解)
  • Connection 对象绝对没有存在的理由,除非它连接 2 个节点。所以 ConnectTwoNodes 的功能属于构造函数。换句话说,将其重命名为 Connection。

在您的第二个解决方案中,一个节点似乎也包含其他节点。但实际上它们是独立存在的。同样,您需要关联或指向其他节点的指针。

我实际上更喜欢 1. 方法。或带有矩阵的非 OO 解决方案,一个轴上有“从”节点,另一个轴上有“到”节点。它还允许您处理可能从纽约到德克萨斯州巴黎但反之亦然的情况,因为下午没有更多航类。换言之,方向图。

关于algorithm - 节点连接情况的良好类设计是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18674521/

相关文章:

python - 将图划分为完整子图的算法

java - 我如何在 Java 中实现这个等式?

javascript - 传递参数时如何避免模块模式中的 getter/setter 函数

java - 在 java 8 jdk 中放置/获取 HashMap 复杂性

java - 如果数组更易于使用且功能更强大,为什么还要使用队列和堆栈等数据结构?

algorithm - 您将如何编写非递归算法来计算阶乘?

algorithm - 比较最佳和平均时间复杂度

php - 如何给大量类方法 "almost"相同的代码

oop - 使用延迟和不可重写过程和 gcc 编译器面向对象的 Fortran 中的不确定行为

c - 使用数组实现最大大小为 5 的固定大小队列