Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在巡更中缝合节点_C++_Algorithm_Matrix - Fatal编程技术网

C++ 如何在巡更中缝合节点

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。制作

我想实现TSP问题的启发式算法。在最后一个阶段,需要拼接节点来构造一个循环。我正在寻找一种在C/C++中实现它的有效方法。更多细节和玩具示例如下所述:

我有n个数据点(因此在最终的巡更中存在n个节点)。我应用了Clarke-Wright算法的第一步,得到了一个nx2矩阵(每行代表一条边)。我想要一个具有不同节点的nx1数组,该数组表示最终巡更中的节点序列

例如: n=5

(无序边,例如,第一行显示节点1和2在最终巡更中相邻)

A:

(最后一次巡演) B:
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;
}