c++ - 旅行商启发式

标签 c++ vector linked-list traveling-salesman

我目前的想法是: 从点 0 开始,将它与最近的点连接起来。对于所有剩余的节点,将其插入到所有可能的位置,并保留成本最低的配置。

所以我从点 0 开始。离点 0 最近的节点是点 1。

所以我现在有 0->1 -> 0

对于第 2 点(以及所有剩余的节点),我将检查新节点可能位于何处的所有可能性:

2 -> 0 -> 1 -> 2

0 -> 2 -> 1 -> 0

0 -> 1-> 2 -> 0

从这里我发现

0 -> 1 -> 2 -> 0 的总欧几里得距离最小,因此这是我将保留的配置。

我将继续为我的其余节点使用此逻辑。

有没有一种简单的方法可以在 C++ 中实现它?我目前的想法是链表可能是个好主意,但如果可能的话,我希望能够使用 vector 。有人对如何解决这个问题有任何建议吗?

最佳答案

您是否考虑过使用有向图然后实现 dijkstra 算法。在有向图中,dijkstra 算法将为您提供从起始节点到图中所有其他节点的最短路径,而不仅仅是您想要的几个节点。

关于c++ - 旅行商启发式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40924294/

相关文章:

c++ - Qt中如何使用QSerialDevice?

c++ - g++ (C++) 警告 : statement has no effect (toggle bool ! = bool)

c++ - 为类的每个实例分配唯一 ID

C++轻量级配置库

c++ - 查找 vector 中元素所有出现的索引

java - 将 vector 字符串解析为字符串?

c++ - 在 C++ 中查找整数 vector 的模式

c - 打印链表

java - 为什么我们可以使用 'new' 关键字来获取非静态外部类中静态内部类的引用?

c++ - 您可以使用什么数据结构来动态存储元素并有效地访问它们?