C++ 如何在巡更中缝合节点
我想实现TSP问题的启发式算法。在最后一个阶段,需要拼接节点来构造一个循环。我正在寻找一种在C/C++中实现它的有效方法。更多细节和玩具示例如下所述: 我有n个数据点(因此在最终的巡更中存在n个节点)。我应用了Clarke-Wright算法的第一步,得到了一个nx2矩阵(每行代表一条边)。我想要一个具有不同节点的nx1数组,该数组表示最终巡更中的节点序列 例如: n=5 (无序边,例如,第一行显示节点1和2在最终巡更中相邻) A: (最后一次巡演) B:C++ 如何在巡更中缝合节点,c++,algorithm,matrix,C++,Algorithm,Matrix,我想实现TSP问题的启发式算法。在最后一个阶段,需要拼接节点来构造一个循环。我正在寻找一种在C/C++中实现它的有效方法。更多细节和玩具示例如下所述: 我有n个数据点(因此在最终的巡更中存在n个节点)。我应用了Clarke-Wright算法的第一步,得到了一个nx2矩阵(每行代表一条边)。我想要一个具有不同节点的nx1数组,该数组表示最终巡更中的节点序列 例如: n=5 (无序边,例如,第一行显示节点1和2在最终巡更中相邻) A: (最后一次巡演) B: 1 2 3 4 5假设轮毂顶点为0。制作
1 2 3 4 5假设轮毂顶点为
0
。制作一个向量xor_adj
,其中每个顶点映射到其相邻顶点的xor(您可以在选择边时以增量方式构建此向量)。找到轮毂顶点的相邻顶点v
,并使用此循环提取边
int u = 0;
while (true) {
// emit the edge u->v
if (v == 0) break;
int w = xor_adj[v] ^ u;
u = v;
v = w;
}
请您为问题中的玩具示例跟踪算法的一些步骤。
int u = 0;
while (true) {
// emit the edge u->v
if (v == 0) break;
int w = xor_adj[v] ^ u;
u = v;
v = w;
}