我正在尝试使用标准的2-opt机制在javascript中生成2-opt路由,我做了以下实现:
// Simple one 2-opt swap
function swap(arr, i, k) {
return arr.slice(0, i - 1).concat(arr.slice(i - 1, k).reverse(), arr.slice(k));
}
// Complete 2-opt swaps
function swaps(arr) {
swapies = []; // array of possible swaps
for (var i = 2; i < arr.length - 1; i++) {
for (var k = i + 1; k < arr.length; k++) {
swapies.push(swap(arr, i, k));
}
}
return swapies;
}
a = [0, 3, 1, 2, 4, 0] // route example
swaps(a)
/* => [ [ 0, 1, 3, 2, 4, 0 ],
[ 0, 2, 1, 3, 4, 0 ],
[ 0, 4, 2, 1, 3, 0 ],
[ 0, 3, 2, 1, 4, 0 ],
[ 0, 3, 4, 2, 1, 0 ],
[ 0, 3, 1, 4, 2, 0 ] ]
*/
据我所知,除 [0,4,2,1,3,0] 交换外,上述输出正确。有谁知道如何解决这个问题?谢谢!